zoukankan      html  css  js  c++  java
  • 洛谷 P4168 [Violet]蒲公英

    https://www.luogu.org/problemnew/show/P4168

    分块大暴力

    错误记录:66,82行lans=ans.b

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<tr1/unordered_map>
     6 using namespace std;
     7 using namespace tr1;
     8 struct D
     9 {
    10     int a,b;
    11     D(){}
    12     D(int x,int y):a(x),b(y){}
    13 };
    14 bool operator<(const D &a,const D &b)    {return a.a<b.a||(a.a==b.a&&a.b>b.b);}
    15 int n,c,m,sz=200,sz1;
    16 int a[40100];
    17 int be[40100],st[202],ed[202];
    18 int nnm[202][40100];
    19 int ttt[40100];
    20 D tt2[202][202];
    21 unordered_map<int,int> ma;
    22 int tt[40100];
    23 int main()
    24 {
    25     int i,j,k,l,r,lans=0;D ans;
    26     scanf("%d%d",&n,&m);
    27     //sz=sqrt(n);
    28     sz1=(n-1)/sz+1;
    29     for(i=1;i<=n;i++)    scanf("%d",&a[i]),be[i]=(i-1)/sz+1,tt[++tt[0]]=a[i];
    30     for(i=1;i<sz1;i++)    st[i]=(i-1)*sz+1,ed[i]=i*sz;
    31     st[sz1]=(sz1-1)*sz+1,ed[sz1]=n;
    32     sort(tt+1,tt+tt[0]+1);tt[0]=unique(tt+1,tt+tt[0]+1)-tt-1;
    33     for(i=1;i<=tt[0];i++)    ma[tt[i]]=i;
    34     for(i=1;i<=n;i++)    a[i]=ma[a[i]];
    35     for(i=1;i<=sz1;i++)
    36     {
    37         memcpy(nnm[i],nnm[i-1],sizeof(nnm[i]));
    38         for(j=st[i];j<=ed[i];j++)    nnm[i][a[j]]++;
    39     }
    40     for(i=1;i<=sz1;i++)
    41     {
    42         memset(ttt,0,sizeof(ttt));ans=D(0,0);
    43         for(j=i;j<=sz1;j++)
    44         {
    45             for(k=st[j];k<=ed[j];k++)
    46             {
    47                 ttt[a[k]]++;
    48                 ans=max(ans,D(ttt[a[k]],a[k]));
    49             }
    50             tt2[i][j]=ans;
    51         }
    52     }
    53     memset(ttt,0,sizeof(ttt));
    54     while(m--)
    55     {
    56         scanf("%d%d",&l,&r);l=(l+lans-1)%n+1;r=(r+lans-1)%n+1;
    57         if(l>r)    swap(l,r);
    58         if(be[l]+1>=be[r])
    59         {
    60             ans=D(0,0);
    61             for(i=l;i<=r;i++)
    62             {
    63                 ttt[a[i]]++;
    64                 ans=max(ans,D(ttt[a[i]],a[i]));
    65             }
    66             printf("%d
    ",tt[ans.b]);lans=tt[ans.b];
    67             for(i=l;i<=r;i++)    ttt[a[i]]--;
    68         }
    69         else
    70         {
    71             ans=tt2[be[l]+1][be[r]-1];
    72             for(i=l;i<=ed[be[l]];i++)
    73             {
    74                 ttt[a[i]]++;
    75                 ans=max(ans,D(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]],a[i]));
    76             }
    77             for(i=st[be[r]];i<=r;i++)
    78             {
    79                 ttt[a[i]]++;
    80                 ans=max(ans,D(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]],a[i]));
    81             }
    82             printf("%d
    ",tt[ans.b]);lans=tt[ans.b];
    83             for(i=l;i<=ed[be[l]];i++)    ttt[a[i]]--;
    84             for(i=st[be[r]];i<=r;i++)    ttt[a[i]]--;
    85         }
    86     }
    87     return 0;
    88 }

    额外:

    loj #6285. 数列分块入门 9

    https://loj.ac/problem/6285

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<tr1/unordered_map>
     6 using namespace std;
     7 using namespace tr1;
     8 struct D
     9 {
    10     int a,b;
    11     D(){}
    12     D(int x,int y):a(x),b(y){}
    13 };
    14 bool operator<(const D &a,const D &b)    {return a.a<b.a||(a.a==b.a&&a.b>b.b);}
    15 int n,c,m,sz=300,sz1;
    16 int a[100100];
    17 int be[100100],st[340],ed[340];
    18 int nnm[340][100100];
    19 int ttt[100100];
    20 D tt2[340][340];
    21 unordered_map<int,int> ma;
    22 int tt[100100];
    23 int main()
    24 {
    25     int i,j,k,l,r,lans=0;D ans;
    26     scanf("%d",&n);m=n;
    27     //sz=sqrt(n);
    28     sz1=(n-1)/sz+1;
    29     for(i=1;i<=n;i++)    scanf("%d",&a[i]),be[i]=(i-1)/sz+1,tt[++tt[0]]=a[i];
    30     for(i=1;i<sz1;i++)    st[i]=(i-1)*sz+1,ed[i]=i*sz;
    31     st[sz1]=(sz1-1)*sz+1,ed[sz1]=n;
    32     sort(tt+1,tt+tt[0]+1);tt[0]=unique(tt+1,tt+tt[0]+1)-tt-1;
    33     for(i=1;i<=tt[0];i++)    ma[tt[i]]=i;
    34     for(i=1;i<=n;i++)    a[i]=ma[a[i]];
    35     for(i=1;i<=sz1;i++)
    36     {
    37         memcpy(nnm[i],nnm[i-1],sizeof(nnm[i]));
    38         for(j=st[i];j<=ed[i];j++)    nnm[i][a[j]]++;
    39     }
    40     for(i=1;i<=sz1;i++)
    41     {
    42         memset(ttt,0,sizeof(ttt));ans=D(0,0);
    43         for(j=i;j<=sz1;j++)
    44         {
    45             for(k=st[j];k<=ed[j];k++)
    46             {
    47                 ttt[a[k]]++;
    48                 ans=max(ans,D(ttt[a[k]],a[k]));
    49             }
    50             tt2[i][j]=ans;
    51         }
    52     }
    53     memset(ttt,0,sizeof(ttt));
    54     while(m--)
    55     {
    56         scanf("%d%d",&l,&r);//l=(l+lans-1)%n+1;r=(r+lans-1)%n+1;
    57         if(l>r)    swap(l,r);
    58         if(be[l]+1>=be[r])
    59         {
    60             ans=D(0,0);
    61             for(i=l;i<=r;i++)
    62             {
    63                 ttt[a[i]]++;
    64                 ans=max(ans,D(ttt[a[i]],a[i]));
    65             }
    66             printf("%d
    ",tt[ans.b]);lans=tt[ans.b];
    67             for(i=l;i<=r;i++)    ttt[a[i]]--;
    68         }
    69         else
    70         {
    71             ans=tt2[be[l]+1][be[r]-1];
    72             for(i=l;i<=ed[be[l]];i++)
    73             {
    74                 ttt[a[i]]++;
    75                 ans=max(ans,D(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]],a[i]));
    76             }
    77             for(i=st[be[r]];i<=r;i++)
    78             {
    79                 ttt[a[i]]++;
    80                 ans=max(ans,D(ttt[a[i]]+nnm[be[r]-1][a[i]]-nnm[be[l]][a[i]],a[i]));
    81             }
    82             printf("%d
    ",tt[ans.b]);lans=tt[ans.b];
    83             for(i=l;i<=ed[be[l]];i++)    ttt[a[i]]--;
    84             for(i=st[be[r]];i<=r;i++)    ttt[a[i]]--;
    85         }
    86     }
    87     return 0;
    88 }
    View Code

  • 相关阅读:
    SpringMVC集成Redis(含源码)
    MyBatis(SSM框架)接入redis作为二级缓存(含源码)
    Cookie、Session和Token认证详解
    CSRF攻击与防御,值得一看
    前端常见浏览器跨域请求解决方案
    通过JS来判断打开的浏览器页面是PC端还是移动端或者是其他形式(navigator.userAgent)
    高级Web前端必会面试题知识点,不断更新中。。。
    swiper 插件从后台获取数据没问题,css 代码啥的也没问题, 但是图片不动,应该怎么解决?
    React的decorators装饰器报错@以及后续问题解决
    call、apply、bind三者之间的用法和区别,并手写实现
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9092763.html
Copyright © 2011-2022 走看看