题意:
N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次。
思路:
把N个数分成sqrt(n)块,预处理d[i][j]表示第i块起点到第j块末尾的答案
枚举起点i,并维护一个数组记录每个数到目前为止出现的次数,从偶变奇、从奇变偶时相应增减答案。
把每个数在数列中出现的位置从小到大排序后放入到一个数组Arr中备用。
读入每个询问[l,r]。如果l和r在同一个块中暴力即可,否则设l所在块的末尾为l’,r所在块的起点为r’,[l’+1,r’-1]的答案已经预处理出。扫描l~l’, r’~r的所有数,统计每个数出现的次数cnt,第一次出现时把它加入队列。
对于队列中的每个数,在数组Arr中二分l’+1和r’-1,得到在[l’+1,r’-1]中出现的次数k。通过对k和当前队列中的数的cnt进行奇偶性讨论更新答案

(from lyd的题解…)

我们就可以vector +lower_bound()
搞定~

(也可以用可持久化线段树之类的东西…)

最后  祝他们幸福……

//By SiriusRen
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100005;
int n,c,m,a[N],Block,block[N],f[1111][1111],vis[N],ans,l,r,stk[N],top;
vector<int>vec[N];
int main(){scanf("%d%d%d",&n,&c,&m),Block=sqrt(n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),block[i]=(i-1)/Block+1,vec[a[i]].push_back(i);for(int i=1;i<=block[n];i++){memset(vis,0,sizeof(vis));int temp=0;for(int j=lower_bound(block,block+1+n,i)-block;j<=n;j++){vis[a[j]]++;if(vis[a[j]]%2==0)temp++;else if(vis[a[j]]!=1)temp--;if(block[j]!=block[j+1])f[i][block[j]]=temp;}}memset(vis,0,sizeof(vis));for(int i=1;i<=m;i++){scanf("%d%d",&l,&r);l=(l+ans)%n+1,r=(r+ans)%n+1;if(l>r)swap(l,r);ans=0;int L=block[l]+1,R=block[r];if(L<R){int ll=lower_bound(block+1,block+1+n,L)-block-1;int rr=lower_bound(block+1,block+1+n,R)-block;R--;top=0;for(int i=l;i<=ll;i++)vis[a[i]]++,stk[++top]=a[i];for(int i=rr;i<=r;i++)vis[a[i]]++,stk[++top]=a[i];ans=f[L][R];for(int i=1;i<=top;i++)if(vis[stk[i]]){int t=lower_bound(vec[stk[i]].begin(),vec[stk[i]].end(),rr)-lower_bound(vec[stk[i]].begin(),vec[stk[i]].end(),ll+1);if(!t){if(vis[stk[i]]%2==0)ans++;}else if(t%2==0){if(vis[stk[i]]%2==1)ans--;}else if(t%2==1&&vis[stk[i]]%2==1)ans++;vis[stk[i]]=0;}}else{top=0;for(int i=l;i<=r;i++)vis[a[i]]++;for(int i=l;i<=r;i++)if(vis[a[i]]){if(vis[a[i]]%2==0)ans++;vis[a[i]]=0;}}printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532036.html

BZOJ 2821 分块+二分相关推荐

  1. BZOJ 2821 作诗 分块

    BZOJ 2821 作诗 Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要虐OI,于是SHY找来一 ...

  2. Bzoj 3343: 教主的魔法(分块+二分答案)

    3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...

  3. C - Super Mario(分块+二分)

    C - Super Mario(分块+二分) Mario is world-famous plumber. His "burly" figure and amazing jumpi ...

  4. bzoj 2821:作诗 分块

    题目大意: 给定一个长为n的序列,每次询问一个区间内出现了偶数次的数的个数.强制在线. 题解: 据说这道题正解只用了5MB的内存 QAQ... 反正我是120MB + 卡过去的... 我们可以分块! ...

  5. BZOJ 2821: 作诗(Poetize) [分块]

    题意: N个数,Q组询问,每次问[l,r]中有多少个数出现正偶数次. 和上题一样呀呀呀 稍微改一改交上就行了 写错好多地方...要认真啊... #include <iostream> #i ...

  6. HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的无向图,每个点都有一个权值,现在需要执行 q 次操作,每次操作分为两种类型: 1 pos val :将第 pos 个点的权值修改为 val ...

  7. P2801-教主的魔法【分块,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P2801 题目大意 nnn个数字,要求支持 区间加上一个数字www 询问一个区间内不小于www的数的个数 解题思路 ...

  8. 【bzoj3343】教主的魔法 (分块 + 二分)

    传送门(权限题) 题目分析 题意为:给定一个数列,修改和查询两种操作,修改每次给定一个区间,区间的所有元素都加上一个给定值,查询询问一段区间的数权值大于等于给定值的数有多少个. 首先对原序列分块,然后 ...

  9. 【分块】[LUOGU 旅行规划] 分块+二分+凸包优化

    题目: 题目链接:[LUOGU 旅行规划] 题解: (由于这个,,我竟然还去写了二维凸包的模板题作为练习,,,然而,一点用都没有,,,,) 先解释一下题面的意思:就是一个区间加的操作,再加上一个区间的 ...

  10. P4168 [Violet] 分块 + 二分

    题意 传送门 P4168 [Violet]蒲公英 题解 在线求区间众数问题.考虑分块,假设将整个区间分为 T T T 块,块 i i i 的边界为 [ L [ i ] , R [ i ] ) [L[i ...

最新文章

  1. 正则匹配中文 UTF-8 GBK
  2. c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案
  3. docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版
  4. java script创建对象_JavaScript七种非常经典的创建对象方式
  5. 算法设计中的基础常用代码
  6. 大型企业都在用的Python反爬虫手段,破了它!
  7. HQChart 股市图表
  8. Atitit QL查询语言总结 目录 1. QL = Query Language, 是查询语言的简称 1 2. 具体实现 1 2.1. Apcl 流程控制语言 1 2.2. 脚本流程控制 2 2.
  9. mysql ---- 全文索引:中文语义分词检索
  10. SitePoint / Flippa Hack Day:入侵我们的第一个物联网项目
  11. 通过pyproj进行WGS84到UTM坐标的转换
  12. 计算机无法连接苹果手机软件,iphone连不上itunes
  13. 用.NET开发MSN聊天机器人 - MSN聊天机器人开发揭秘
  14. fastadmin 后台新增和编辑成功后刷新整个页面
  15. flutter pdf 插件使用
  16. i513500h和r5 5600h选哪个 r55600h和i513500h差多少
  17. ReacNative:报错Cannot add a child that doesn’t have a YogaNode to a parent without a measure function!
  18. 从校园到职场 - 什么是职场经验
  19. 你什么时候放下,什么时候就没有烦恼。
  20. Redist过期策略、应用、持久化

热门文章

  1. BZOJ2879 [Noi2012]美食节
  2. Jquery Ajax 异步设置Table中某列的值
  3. Mac和PC在工作中管理的对比(5)
  4. Android_View,ViewGroup,Window之间的关系
  5. URAL 1004 Sightseeing Trip
  6. 一个超级大牛的超级自引文献【这才叫牛:引的响当当】
  7. ITK简介与ITK Pipeline
  8. Library Monkey Pro for Mac(专业的音频控制整理工具)
  9. mac 上 php 验证码不显示图片
  10. JS字符串截取(获取指定字符后面的所有字符内容)