zoukankan      html  css  js  c++  java
  • 洛谷 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 }
  • 相关阅读:
    Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享
    随 机 数 算 法
    java 状态模式 解说演示样例代码
    数据挖掘 决策树算法 ID3 通俗演绎
    经常使用表单数据的验证方法
    编程基本功训练:流程图画法及练�
    log4net使用具体解释
    妄想性仮想人格障害 新手教程 +改动器
    使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
    经典回忆Effective C++ 1
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9091856.html
Copyright © 2011-2022 走看看