bzoj2821
来源:互联网 发布:stc拆分盘源码 编辑:程序博客网 时间:2024/06/06 01:24
好多细节写错调了好久qaq
看来我还是得再学习一个
经试验块大小取在60左右时速度最快
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;typedef long long LL;inline int read(){ int x=0;bool f=0;char c=getchar(); for (;c<'0'||c>'9';c=getchar()) f=c=='-'?1:0; for (;c>='0'&&c<='9';c=getchar()) x=x*10+c-'0'; return f?-x:x;}const int N=100010,B=60,S=N/B+4;int n,C,m,A[N],ln[N],bl[N],bn=0,sum[N],f[S][S],ans=0, nxt[N],hd[N],lp[N],ps[N],lx[2],rx[2], ct=0,num[N],c=0,an[N],cn[N]; inline int find(int c,int x){ int l=lp[c],r=lp[c+1]-1,mid; if (x<=ps[l]) return 0; if (x>ps[r]) return r-l+1; while (l+1<r) { if (x<=ps[mid=l+r>>1]) r=mid; else l=mid; } return r-lp[c];} int main(){ n=read();C=read();m=read(); for (int i=1;i<=n;i++) A[i]=read(); for (int i=1;i<=n;i+=B) ln[++bn]=i;ln[bn+1]=n+1; for (int i=1,rec=0;i<=bn;i++) { memset(sum,0,sizeof sum);rec=0; for (int j=ln[i];j<ln[i+1];j++) { bl[j]=i; if (++sum[A[j]]>1) (sum[A[j]]&1)?rec--:rec++; } f[i][i]=rec; for (int j=i+1;j<=bn;j++) { for (int k=ln[j];k<ln[j+1];k++) if (++sum[A[k]]>1) (sum[A[k]]&1)?rec--:rec++; f[i][j]=rec; } } for (int i=n;i;i--) nxt[i]=hd[A[i]],hd[A[i]]=i; for (int i=1,p=1;i<=C;i++) { lp[i]=p; for (int j=hd[i];j;j=nxt[j]) ps[p++]=j; } lp[C+1]=n+1; for (int u,v;m--;) { u=(read()+ans)%n+1;v=(read()+ans)%n+1; if (u>v) swap(u,v); ans=f[bl[u]+1][bl[v]-1]; if (bl[u]==bl[v]) lx[0]=u,rx[0]=v,lx[1]=1,rx[1]=0; else lx[0]=u,rx[0]=ln[bl[u]+1]-1,lx[1]=ln[bl[v]],rx[1]=v; ct=c=0; for (int ii=0;ii<2;ii++) for (int i=lx[ii];i<=rx[ii];i++) num[++ct]=A[i]; sort(num+1,num+ct+1); for (int i=1;i<=ct;i++) if (num[i]==num[i-1]) cn[c]++; else an[++c]=num[i],cn[c]=1; if (bl[u]==bl[v]||bl[u]+1==bl[v]) { for (int i=1;i<=c;i++) (cn[i]&1)?0:ans++; printf("%d\n",ans);continue; } for (int i=1,r1,r2;i<=c;i++) { r1=find(an[i],ln[bl[u]+1]); r2=find(an[i],ln[bl[v]]); r2=r2-r1;r1=cn[i]; if (!r2&&r1&&(r1&1)==0) ans++; if (r2&&(r1&1)) (r2&1)?ans++:ans--; } printf("%d\n",ans); } return 0;}
0 0
- bzoj2821
- BZOJ2821(作诗)
- [bzoj2821]作诗
- bzoj2821 作诗
- bzoj2821 -- 分块
- bzoj2821: 作诗(Poetize)
- bzoj2821 作诗(Poetize)
- 【bzoj2821】作诗(Poetize)
- 【bzoj2821】【作诗】【分块】
- BZOJ2821: 作诗(Poetize)
- 分块-bzoj2821: 作诗(Poetize)
- 【bzoj2821】作诗(Poetize)
- bzoj2821[作诗(Poetize)]
- 【bzoj2821】作诗(Poetize)
- BZOJ2821: 作诗(Poetize)(分块)
- sklearn 学习笔记一:开始学习sklearn
- Hibernate 性能操作
- 740A Alyona and copybooks codeforces
- 格式化输入输出
- 740B Alyona and flowers codeforces
- bzoj2821
- [LeetCode]Median of Two Sorted Arrays(Java)
- 235. Lowest Common Ancestor of a Binary Search Tree(unsolved)
- tomcat 转发http请求到https
- HTML5本地数据库存储的应用
- hibernate 查询语句
- web安全————XSS(攻击篇)
- 简单明了,彻底地理解Binder
- ffmpeg学习二:《FFmpeg Basics》读书笔记(上)