HDU 3518 Boring counting

2015-07-20 17:07:22 · 作者: · 浏览: 4

n<1000,最后查询的时候可以用n^2算法,如果是10000就不行了

?

#include
  
    
#include
   
     #include
    
      using namespace std; typedef long long ll; #define N 1005 char s[N]; int r[N]; int wa[N],wb[N],wv[N],ws[N],Rank[N],sa[N],height[N]; int cmp(int *r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l]; } void da(int *r,int *sa,int n,int m){ int i,j,p,*x=wa,*y=wb; for(i=0;i
     
      =0;i--) sa[--ws[x[i]]]=i; for(j=1,p=1;p
      
       =j) y[p++]=sa[i]-j; for(i=0;i
       
        =0;i--) sa[--ws[wv[i]]]=y[i]; swap(x,y); for(p=1,x[sa[0]]=0,i=1;i
        
         =len &&i<=l){//注意i>l的时候要跳出循环,不然会由于上一个数据引起错误 if(sa[i]
         
          maxi) maxi=sa[i]; i++; } if(maxi-mini>=len) ans++; mini=sa[i]; maxi=sa[i]; } } printf("%I64d\n",ans); } return 0; }
         
        
       
      
     
    
   
  


?