• 2019.3.23考试


    睿智场

    T1 不知道哪来的神仙题,机房集体咕咕了

    T2 因为是随机的所以搞类似缓冲区的东西放在中间

    不想写了 看i207M的吧

    或者直接平衡树维护中间大概1e4个也行

    Upd:orz lhw

    T3 打表找SG的规律,发现p是奇数是奇偶性,p是偶数除了模p+1是p的是2,其他的都是奇偶性

    前者线段树,后者分块

    分块麻烦(其实是只剩半个小时没时间了),考场循环展开+优化水过

      1 #pragma GCC optimize("O2,Ofast,inline")
      2 #include<cstdio>
      3 #include<cctype>
      4 #include<cstring>
      5 #include<algorithm>
      6 #include<unordered_map>
      7 #define uint unsigned int
      8 using namespace std;
      9 const int N=400005;
     10 uint n,m,p,k,op,tot;
     11 uint a[N],val[N],laz[N],ans[N];
     12 
     13 char BF[1<<23],*P1=BF,*P2=BF;
     14 char Gc(){return (P1==P2&&(P2=(P1=BF)+fread(BF,1,1<<21,stdin),P1==P2)?EOF:*P1++);}
     15 void Read(uint &x)
     16 {
     17     x=0; char ch=Gc();
     18     while(!isdigit(ch)) ch=Gc();
     19     while(isdigit(ch)) x=((x<<3)+(x<<1)+(ch^48))%(p+1),ch=Gc();
     20 }
     21 void R(uint &x)
     22 {
     23     x=0; char ch=Gc();
     24     while(!isdigit(ch)) ch=Gc();
     25     while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=Gc();
     26 }
     27 char OBF[1<<23],*Ot=OBF;
     28 void W(uint x) 
     29 {
     30     if(x>9) W(x/10);
     31     *Ot++=x%10|48;
     32 }
     33 
     34 void Create(int nde,int l,int r)
     35 {
     36     if(l==r)
     37         val[nde]=a[l];
     38     else
     39     {
     40         int mid=(l+r)>>1,ls=2*nde,rs=2*nde+1;
     41         Create(ls,l,mid),Create(rs,mid+1,r);
     42         val[nde]=val[ls]^val[rs];
     43     }
     44 }
     45 void Release(int nde,int l,int r)
     46 {
     47     if(laz[nde])
     48     {
     49         uint &lz=laz[nde];
     50         int mid=(l+r)>>1,ls=2*nde,rs=2*nde+1;
     51         val[ls]^=((mid-l+1)&1),val[rs]^=((r-mid)&1);
     52         laz[ls]^=1,laz[rs]^=1,lz=0;
     53     }
     54 }
     55 void Modify(int nde,int l,int r,int ll,int rr)
     56 {
     57     if(l>rr||r<ll)
     58         return;
     59     else if(l>=ll&&r<=rr)
     60         val[nde]^=((r-l+1)&1),laz[nde]^=1;
     61     else
     62     {
     63         int mid=(l+r)>>1,ls=2*nde,rs=2*nde+1; Release(nde,l,r);
     64         Modify(ls,l,mid,ll,rr),Modify(rs,mid+1,r,ll,rr),val[nde]=val[ls]^val[rs];
     65     }
     66 }
     67 uint Query(int nde,int l,int r,int ll,int rr)
     68 {
     69     if(l>rr||r<ll)
     70         return 0;
     71     else if(l>=ll&&r<=rr)
     72         return val[nde];
     73     else
     74     {
     75         int mid=(l+r)>>1,ls=2*nde,rs=2*nde+1; Release(nde,l,r);
     76         return Query(ls,l,mid,ll,rr)^Query(rs,mid+1,r,ll,rr);
     77     }
     78 }
     79 void Sol1()
     80 {
     81     uint t1,t2,t3;
     82     const int nn=n,mm=m;
     83     for(int i=1;i<=nn;i++) R(a[i]),a[i]&=1;
     84     Create(1,1,nn);
     85     for(int i=1;i<=mm;i++)
     86     {
     87         R(op);
     88         if(!op)
     89         {
     90             R(t1),R(t2),R(t3);
     91             if(t3&1) Modify(1,1,n,t1,t2);
     92         }
     93         else
     94         {
     95             R(t1),R(t2);
     96             ans[++tot]=Query(1,1,n,t1,t2); 
     97         }
     98     }
     99 }
    100 
    101 void Sol2()
    102 {
    103     register int i,j; 
    104     const int nn=n,mm=m; 
    105     const uint mod=p+1,md=p;
    106     for(i=1;i<=nn;i++) Read(a[i]);
    107     for(i=1;i<=mm;i++)
    108     {
    109         R(op);
    110         if(!op)
    111         {
    112             uint t1,t2,ad;
    113             R(t1),R(t2),Read(ad);
    114             const int lim=t2,lm=t2-8; const uint t3=ad;
    115             for(j=t1;j<=lm;j+=8)
    116             {
    117                 int n1=j+1,n2=j+2,n3=j+3,n4=j+4,n5=j+5,n6=j+6,n7=j+7;
    118                 a[j]=(a[j]+t3>=mod)?(a[j]+t3-mod):(a[j]+t3);
    119                 a[n1]=(a[n1]+t3>=mod)?(a[n1]+t3-mod):(a[n1]+t3);
    120                 a[n2]=(a[n2]+t3>=mod)?(a[n2]+t3-mod):(a[n2]+t3);
    121                 a[n3]=(a[n3]+t3>=mod)?(a[n3]+t3-mod):(a[n3]+t3);
    122                 a[n4]=(a[n4]+t3>=mod)?(a[n4]+t3-mod):(a[n4]+t3);
    123                 a[n5]=(a[n5]+t3>=mod)?(a[n5]+t3-mod):(a[n5]+t3);
    124                 a[n6]=(a[n6]+t3>=mod)?(a[n6]+t3-mod):(a[n6]+t3);
    125                 a[n7]=(a[n7]+t3>=mod)?(a[n7]+t3-mod):(a[n7]+t3);
    126             }
    127             while(j<=lim) 
    128             {
    129                 a[j]+=t3;
    130                 if(a[j]>=mod) a[j]-=mod; ++j;
    131             }
    132         }
    133         else
    134         {
    135             uint t1,t2;
    136             R(t1),R(t2); 
    137             const int lim=t2,lm=t2-8;
    138             uint ss=0,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0;
    139             for(j=t1;j<=lm;j+=8)
    140             {
    141                 int n1=j+1,n2=j+2,n3=j+3,n4=j+4,n5=j+5,n6=j+6,n7=j+7;
    142                 ss^=((a[j]^md)?(a[j]&1):2);
    143                 s1^=((a[n1]^md)?(a[n1]&1):2);
    144                 s2^=((a[n2]^md)?(a[n2]&1):2);
    145                 s3^=((a[n3]^md)?(a[n3]&1):2);
    146                 s4^=((a[n4]^md)?(a[n4]&1):2);
    147                 s5^=((a[n5]^md)?(a[n5]&1):2);
    148                 s6^=((a[n6]^md)?(a[n6]&1):2);
    149                 s7^=((a[n7]^md)?(a[n7]&1):2);
    150             }
    151             while(j<=lim) {ss^=((a[j]==md)?2:(a[j]&1));++j;}
    152             ans[++tot]=(bool)(ss^s1^s2^s3^s4^s5^s6^s7);
    153         }
    154     }
    155 }
    156 
    157 int main()
    158 {
    159     register uint i;
    160     R(n),R(m),R(p);
    161     if(p&1) Sol1(); else Sol2();
    162     for(i=1;i<=tot;i++)
    163     {
    164         W(ans[i]);
    165         if(i!=tot) *Ot++='
    ';
    166     }
    167     fwrite(OBF,Ot-OBF,1,stdout);
    168     return 0;
    169 }
    View Code
  • 相关阅读:
    解决“Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'org.springframework.boot' not found.”
    linux随机生成密码
    NFS网络共享文件系统
    shell实现带颜色输出的进度条
    【AtCoder】 ARC 101
    【AtCoder】 ARC 102
    【AtCoder】 ARC 103
    20190814校内模拟赛
    「2019-8-13提高模拟赛」树 (tree)
    [PA2014]Fiolki
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/10584560.html
Copyright © 2020-2023  润新知