BZOJ2741: 【FOTILE模拟赛】L

沃日
调试了一晚上发现是uint 爆了

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
#define uint unsigned int

#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)

char c;
inline void read(uint &a)
{
 a=0;do c=getchar();while(c<'0'||c>'9');
 while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();
}
struct Trie
{
   Trie *C[2];
   uint cnt;
   Trie(){cnt=0;C[0]=C[1]=NULL;}
}*T[22001];
Trie C[1000001];
Trie *Aa;
int tt;
uint Xor[22001];
inline void Bg()
{
Aa=new Trie;Aa->C[0]=Aa->C[1]=Aa;
}
Trie*New_Node()
{
  Trie *N=C+tt++;
  N->C[0]=Aa;
  N->C[1]=Aa;
 return N;
}
Trie *Modify(Trie*Old,uint D,uint base)
{
  Trie *N=New_Node();
   if(Old)
     *N=*Old;   
   N->cnt++;
  if(!base)return N;
   if(D&base)
       N->C[1]=Modify(Old->C[1],D,base>>1);
    else
       N->C[0]=Modify(Old->C[0],D,base>>1);
    return N;
}
uint Query(Trie*Old,Trie*New,uint D,uint base)
{
     if(!base)return 0;
     uint num=(D&base)?1:0;
     if(New->C[!num]->cnt^Old->C[!num]->cnt)
       return base+Query(Old->C[!num],New->C[!num],D,base>>1);
     return Query(Old->C[num],New->C[num],D,base>>1);
}
uint As[201][22001];
int main()
{


   uint a=1<<30;Bg();
   T[0]=Aa;
   T[1]=Modify(T[0],0,a);
   uint n,m;
   read(n),read(m);
   for(uint i=1;i<=n;i++)
     read(Xor[i]),Xor[i]^=Xor[i-1],T[i+1]=Modify(T[i],Xor[i],a);
   uint Block=sqrt(n+1),st;
   for(uint i=0;i*Block<=n;i++)
    for(uint j=(st=i*Block);j<=n;j++)
      As[i][j]=max(Query(T[st],T[j+1],Xor[j],a),j?As[i][j-1]:0);
   uint l,r,ans=0;
    while(m--)
    {
         read(l),read(r);
        l=(l+0ll+ans)%n+1;r=(r+0ll+ans)%n+1;
         ans=0;
         if(l>r)swap(l,r);--l;
         /*uint lb=l/Block; if(l%Block) lb++; ans=As[lb][r]; for(uint i=l+1;i%Block&&i<=r;i++) ans=max(ans,Query(T[l],T[r+1],Xor[i],a)); */
        int temp=l/Block+1;  
        ans=As[temp][r];  
        for(temp=min(temp*Block+0ll-1,r);temp>=(int)l;--temp) 
          ans=max(ans,Query(T[l],T[r+1],Xor[temp],a)); 
           printf("%d\n",ans);
      }
   return 0;
}

你可能感兴趣的:(BZOJ2741: 【FOTILE模拟赛】L)