• 洛谷 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

  • 相关阅读:
    KVM安装之脚本和镜像目录树准备
    KVM安装之网桥
    安装KVM虚拟机步骤
    NFS搭建配置
    为项目组搭建开发测试环境介绍
    VMWare虚拟机copy后网卡不是eth0解决办法
    安装Oracle 10g和SQLServer2008(仅作学习使用VirtualBox虚拟机来安装节省电脑资源)
    常用的SQL语句
    在web项目中集成Spring
    IOC容器装配Bean(注解方式)
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9092763.html
Copyright © 2020-2023  润新知