Czy może ktoś wyjaśnić co tu jest nie tak (słownik podsłów bazowych KMR?)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <utility>
using namespace std;
pair<int,pair<int,int> >p[1000000];
string tab;
int KMR[50000][20];
int logarytm=1,ile=0;
int main(){
int n;
cin>>n;
cin>>tab;
tab[n]='~';
while(n>logarytm){
logarytm*=2;
ile++;
}
for(int i=0;i<n;++i){
KMR[i][0]=tab[i]-'a';
}
int pot=1;
int wyn=0;
for(int l=1;l<=ile;++l){
for(int i=0;i<n;++i){
if(i+pot>n){
p[i]=make_pair(KMR[i][l-1],make_pair(-1,i));
}
else {
p[i]=make_pair(KMR[i][l-1],make_pair(KMR[i+pot][l-1],i));
}
}
sort(p,p+n);
pair<int,int>pom=make_pair(-1,-1);
for(int i=0;i<n;++i){
if(pom!=make_pair(p[i].first,p[i].second.first)){
pom=make_pair(p[i].first,p[i].second.first);
wyn++;
}
KMR[p[i].second.second][l]=wyn;
}
pot<<=2;
}
for(int i=0;i<n;++i){
printf("%d ",KMR[i][1]);
}
return 0;
}