bzoj2821作诗
http://www.lydsy.com/JudgeOnline/problem.php?id=2821
分块
我们把数列分成$\sqrt{N}$块
记$f[i][j]$表示第i块到第j块的答案,这个可以在$O(N\sqrt{N})$内得到。
记$g[i][j]$第1到第i块中数字j出现了多少次,这个我们可以先求出第i块中数字j出现了多少次,然后求前缀和即可,这个可以在$O(C\sqrt{N})$内得到。
对于询问区间[l,r]我们可以从f数组中快速求出中间连续的完整的块答案。
对于剩余部分,我们可以一个一个调整答案,反正剩余部分的长度是$\sqrt{N}$级别的。
- #include<cstdio>
- #include<cstdlib>
- #include<iostream>
- #include<fstream>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<cmath>
- #include<queue>
- #include<stack>
- #include<map>
- #include<utility>
- #include<set>
- #include<bitset>
- #include<vector>
- #include<functional>
- #include<deque>
- #include<cctype>
- #include<climits>
- #include<complex>
- //#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj
- using namespace std;
- typedef long long LL;
- typedef double DB;
- typedef pair<int,int> PII;
- typedef complex<DB> CP;
- #define mmst(a,v) memset(a,v,sizeof(a))
- #define mmcy(a,b) memcpy(a,b,sizeof(a))
- #define fill(a,l,r,v) fill(a+l,a+r+1,v)
- #define re(i,a,b) for(i=(a);i<=(b);i++)
- #define red(i,a,b) for(i=(a);i>=(b);i--)
- #define ire(i,x) for(typedef(x.begin()) i=x.begin();i!=x.end();i++)
- #define fi first
- #define se second
- #define m_p(a,b) make_pair(a,b)
- #define p_b(a) push_back(a)
- #define SF scanf
- #define PF printf
- #define two(k) (1<<(k))
- template<class T>inline T sqr(T x){return x*x;}
- template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
- template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;}
- const DB EPS=1e-;
- inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
- const DB Pi=acos(-1.0);
- inline int gint()
- {
- int res=;bool neg=;char z;
- for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
- if(z==EOF)return ;
- if(z=='-'){neg=;z=getchar();}
- for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
- return (neg)?-res:res;
- }
- inline LL gll()
- {
- LL res=;bool neg=;char z;
- for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
- if(z==EOF)return ;
- if(z=='-'){neg=;z=getchar();}
- for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
- return (neg)?-res:res;
- }
- const int maxN=;
- const int maxC=;
- const int maxcnt=;
- int N,C,Q;
- int a[maxN+];
- int cnt,len,l[maxcnt+],r[maxcnt+];
- int id[maxN+];
- int f[maxcnt+][maxcnt+];
- int g[maxcnt+][maxC+];
- int t[maxC+];
- int ans;
- int main()
- {
- freopen("bzoj2821.in","r",stdin);
- freopen("bzoj2821.out","w",stdout);
- int i,j,k;
- N=gint();C=gint();Q=gint();
- re(i,,N)a[i]=gint();
- len=int(sqrt(DB(N)));
- re(i,,N)
- {
- if((i-)%len==)r[cnt]=i-,l[++cnt]=i;
- id[i]=cnt;
- }
- r[cnt]=N;
- re(i,,cnt)
- {
- int res=;
- re(j,i,cnt)
- {
- re(k,l[j],r[j])
- {
- t[a[k]]++;
- if(t[a[k]]>= && !(t[a[k]]&))res++;
- if(t[a[k]]>= && (t[a[k]]&))res--;
- }
- f[i][j]=res;
- }
- re(k,l[i],N)t[a[k]]--;
- }
- re(i,,cnt)re(j,l[i],r[i])g[i][a[j]]++;
- re(i,,cnt)re(j,,C)g[i][j]+=g[i-][j];
- ans=;
- while(Q--)
- {
- int L=(gint()+ans)%N+,R=(gint()+ans)%N+,res=;
- if(L>R)swap(L,R);
- if(id[L]==id[R] || id[L]+==id[R])
- {
- re(i,L,R)
- {
- t[a[i]]++;
- if(t[a[i]]>= && !(t[a[i]]&))res++;
- if(t[a[i]]>= && (t[a[i]]&))res--;
- }
- re(i,L,R)t[a[i]]--;
- ans=res;
- }
- else
- {
- int p=(L==l[id[L]])?id[L]:id[L]+,q=(R==r[id[R]])?id[R]:id[R]-;
- res=f[p][q];
- red(i,l[p]-,L)
- {
- t[a[i]]++;
- t[a[i]]+=g[q][a[i]]-g[p-][a[i]];
- if(t[a[i]]>= && !(t[a[i]]&))res++;
- if(t[a[i]]>= && (t[a[i]]&))res--;
- t[a[i]]-=g[q][a[i]]-g[p-][a[i]];
- }
- re(i,r[q]+,R)
- {
- t[a[i]]++;
- t[a[i]]+=g[q][a[i]]-g[p-][a[i]];
- if(t[a[i]]>= && !(t[a[i]]&))res++;
- if(t[a[i]]>= && (t[a[i]]&))res--;
- t[a[i]]-=g[q][a[i]]-g[p-][a[i]];
- }
- red(i,l[p]-,L)t[a[i]]--;
- re(i,r[q]+,R)t[a[i]]--;
- ans=res;
- }
- PF("%d\n",ans);
- }
- return ;
- }
bzoj2821作诗的更多相关文章
- BZOJ2821 作诗(Poetize) 【分块】
BZOJ2821 作诗(Poetize) Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI ...
- 【分块】BZOJ2821 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3265 Solved: 951[Submit][Status][ ...
- BZOJ2821 作诗(Poetize) 主席树 bitset
原文链接https://www.lydsy.com/JudgeOnline/problem.php?id=2821 题目传送门 - BZOJ2821 题意 $n$ 个数,$m$ 组询问,每次问 $[l ...
- BZOJ2821 作诗(分块)
和区间众数几乎一模一样的套路. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include&l ...
- bzoj2821: 作诗(Poetize)
分块 分sqrt(n)块 F[i][j]表示块i到块j的答案 s[i][j]表示数字i在前j块内出现了几次 #include <iostream> #include <cstdio& ...
- BZOJ2821 作诗(Poetize) 分块
题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法 查询的内容: 区 ...
- 2018.09.30 bzoj2821: 作诗(Poetize)(分块)
传送门 分块经典题目. 先将数列分块. 然后预处理出每两个块之间有多少个数出现了正偶数次. 这样查询的时候对于中间的完整块直接用预处理出的数组搞定. 剩下的暴力枚举求解. 代码: #include&l ...
- [BZOJ2821]作诗
description 在线询问区间内出现次数为正偶数的数的种数. data range \[n,m\le 10^5\] solution 分块大法好 首先离散化权值 这种对于权值做询问并且询问放在一 ...
- [BZOJ2821]作诗(分块)
题意 N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次对于100%的数据,1≤n,c,m≤105 题解 (传说lyd省选的时候看错题 把题看成这个了 从此又多了一道分块神题)把N个数 ...
随机推荐
- win8.1 Dism 应用实例
使用win8.1安装镜像制作wimboot启动 制作wim启动映像文件 Dism /Export-Image /WIMBoot/SourceImageFile:z:\sources\install.w ...
- Com原理及應用——Com對象和接口
1.COM对象的理解 COM对象类似于C++语言中类的概念,类的每个实例代表一个COM对象,它也包括属性(即状态)和方法(即操作),状态反映对象的存在,方法就是接口. 2.COM对象的标识-CLSID ...
- Java 编程的动态性,第3部分: 应用反射--转载
在 上个月的文章中,我介绍了Java Reflection API,并简要地讲述了它的一些基本功能.我还仔细研究了反射的性能,并且在文章的最后给出了一些指导方针,告诉读者在一个应用程序中何时应该使用反 ...
- Linux驱动开发cdev驱动分层设计
#ifndef MYDEV_H #define MYDEV_H #define DYNAMIC_MINOR 256 struct mydev{ const char *name; const stru ...
- 【酷Q插件制作】教大家做一个简单的签到插件
酷Q插件已经有很多了,社区分享一大堆,不过还是自己写才有乐趣,哈哈.不得不吐槽一下,酷Q竟然不更新了,出了个酷Q pro,还收费!!诶.不过这也影响不了咱写插件的心情,今天教大家写一个酷Q签到插件,虽 ...
- Android项目中如何用好构建神器Gradle?(转)
最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...
- 应用框架 ViewPager Tab Fragment SlidingMenu
介绍 常见的应用框架 框架一:多个tab+Fragment,点击不同的tab加载不同的Fragment,不能滑动切换只能点击切换: 框架二:多个tab+ViewPager+FragmentPagerA ...
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Session深度探索
什么是Session? web是无状态,这意味着每次页面被回传到服务器时,都重新生成一个web页面类的一个新的实例.众所周知http时无状态的协议.它不能获得客户端的信息.如果用户录入了一些信息,当跳 ...
- [php基础]PHP.INI配置:文件上传功能配置教程
昨天分享了在PHP网站开发中如何在php.ini中配置实现session功能的PHP教程,今天继续分享在利用PHP实现文件上传功能时几点关键php.ini的配置. 说到在php.ini中的文件上传的配 ...