后缀数组

来源:互联网 发布:假人交友app源码 编辑:程序博客网 时间:2024/05/21 11:12

后缀数组比较大小:
题目:给你一个字符串 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 10009string 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;        }    }} 


 

 

 

 

原创粉丝点击