• 洛谷 P4135 作诗


    分块大暴力,跟区间众数基本一样

     1 #pragma GCC optimize(3)
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 using namespace std;
     7 int n,c,m,sz=400,sz1;
     8 int a[100100];
     9 int be[100100],st[251],ed[251];
    10 int nnm[251][100100];
    11 int ttt[100100],tt2[251][251];
    12 int main()
    13 {
    14     int i,j,k,l,r,lans=0,ans;
    15     scanf("%d%d%d",&n,&c,&m);
    16     //sz=sqrt(n);
    17     sz1=(n-1)/sz+1;
    18     for(i=1;i<=n;i++)    scanf("%d",&a[i]),be[i]=(i-1)/sz+1;
    19     for(i=1;i<sz1;i++)    st[i]=(i-1)*sz+1,ed[i]=i*sz;
    20     st[sz1]=(sz1-1)*sz+1,ed[sz1]=n;
    21     for(i=1;i<=sz1;i++)
    22     {
    23         memcpy(nnm[i],nnm[i-1],sizeof(nnm[i]));
    24         for(j=st[i];j<=ed[i];j++)    nnm[i][a[j]]++;
    25     }
    26     for(i=1;i<=sz1;i++)
    27     {
    28         memset(ttt,0,sizeof(ttt));ans=0;
    29         for(j=i;j<=sz1;j++)
    30         {
    31             for(k=st[j];k<=ed[j];k++)
    32             {
    33                 if(ttt[a[k]]&&ttt[a[k]]%2==0)    ans--;
    34                 ttt[a[k]]++;
    35                 if(ttt[a[k]]&&ttt[a[k]]%2==0)    ans++;
    36             }
    37             tt2[i][j]=ans;
    38         }
    39     }
    40     memset(ttt,0,sizeof(ttt));
    41     while(m--)
    42     {
    43         scanf("%d%d",&l,&r);l=(l+lans)%n+1;r=(r+lans)%n+1;
    44         if(l>r)    swap(l,r);
    45         if(be[l]+1>=be[r])
    46         {
    47             ans=0;
    48             for(i=l;i<=r;i++)
    49             {
    50                 if(ttt[a[i]]&&ttt[a[i]]%2==0)    ans--;
    51                 ttt[a[i]]++;
    52                 if(ttt[a[i]]&&ttt[a[i]]%2==0)    ans++;
    53             }
    54             printf("%d
    ",ans);lans=ans;
    55             for(i=l;i<=r;i++)    ttt[a[i]]--;
    56         }
    57         else
    58         {
    59             ans=tt2[be[l]+1][be[r]-1];
    60             for(i=l;i<=ed[be[l]];i++)
    61             {
    62                 if(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]])%2==0)    ans--;
    63                 ttt[a[i]]++;
    64                 if(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]])%2==0)    ans++;
    65             }
    66             for(i=st[be[r]];i<=r;i++)
    67             {
    68                 if(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]])%2==0)    ans--;
    69                 ttt[a[i]]++;
    70                 if(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]])%2==0)    ans++;
    71             }
    72             printf("%d
    ",ans);lans=ans;
    73             for(i=l;i<=ed[be[l]];i++)    ttt[a[i]]--;
    74             for(i=st[be[r]];i<=r;i++)    ttt[a[i]]--;
    75         }
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    高可用性GRE+IPSEC中心—分支
    高可用性GRE+IPSEC中心—分支
    高可用性GRE+IPSEC中心—分支
    mysql数据库移植
    mysql数据库移植
    mysql数据库移植
    mysql数据库移植
    Linux 查看进程资源--ps、top命令
    比特币底层设计剖析
    比特币的P2P网络协议
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9091856.html
Copyright © 2020-2023  润新知