后缀数组比较大小:
题目:给你一个字符串 s , 它有所有的 后缀串suffix[i]={s[i],s[i+1],....,s[len-1]};
现在给你 p(p<=1000000)个后缀串的两个下标,要你比较两个后缀字符串的字典序大小
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
#define manx 10009
string s,suffix[manx];
int sa[manx],pos[manx];
bool comp(const int &i, const int &j){
return suffix[i]<suffix[j];
}
int main(){
while(cin>>s){
int len=s.size();
for(int i=len-1; i>=0; i--){
suffix[i] = s[i];
suffix[i] += suffix[i+1];
sa[i] = i;
}
sort(sa,sa+len,comp);
int n,m,p;
for(int i=0;i<len;i++){
// cout<<suffix[sa[i]]<<endl;
pos[sa[i]] = i;
}
scanf("%d",&p);
for(int i=0;i<p;i++){
scanf("%d%d",&n,&m);
if(pos[n]>pos[m]) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
}
}