BZOJ2821 作诗(分块)
和区间众数几乎一模一样的套路。
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
#define BLOCK 350
int n,m,c,a[N],lastans=;
int block,tot,L[N],R[N],pos[N];
int cnt[N],f[BLOCK][BLOCK],sum[BLOCK][N];
int main()
{
freopen("bzoj2821.in","r",stdin);
freopen("bzoj2821.out","w",stdout);
n=read(),c=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
block=sqrt(n);tot=n/block+(n%block>);
for (int i=;i<=n/block;i++)
L[i]=(i-)*block+,R[i]=(i-)*block+block;
if (n/block<tot) L[tot]=n/block*block+,R[tot]=n;
for (int i=;i<=tot;i++)
{
memset(cnt,,sizeof(cnt));
for (int j=i;j<=tot;j++)
{
f[i][j]=f[i][j-];
for (int k=L[j];k<=R[j];k++)
{
cnt[a[k]]++;
if (!(cnt[a[k]]&)) f[i][j]++;
else if (cnt[a[k]]>) f[i][j]--;
}
}
memcpy(sum[i],sum[i-],sizeof(sum[i]));
for (int j=L[i];j<=R[i];j++)
pos[j]=i,sum[i][a[j]]++;
}
memset(cnt,,sizeof(cnt));
while (m--)
{
int x=read(),y=read();
x=(x+lastans)%n+,y=(y+lastans)%n+;
if (x>y) swap(x,y);
int num=;
if (pos[x]==pos[y])
{
for (int i=x;i<=y;i++)
{
cnt[a[i]]++;
if (!(cnt[a[i]]&)) num++;
else if (cnt[a[i]]>) num--;
}
for (int i=x;i<=y;i++) cnt[a[i]]--;
}
else
{
num=f[pos[x]+][pos[y]-];
for (int i=x;i<=R[pos[x]];i++)
{
cnt[a[i]]++;
if (!(cnt[a[i]]+sum[pos[y]-][a[i]]-sum[pos[x]][a[i]]&)) num++;
else if (cnt[a[i]]+sum[pos[y]-][a[i]]-sum[pos[x]][a[i]]>) num--;
}
for (int i=L[pos[y]];i<=y;i++)
{
cnt[a[i]]++;
if (!(cnt[a[i]]+sum[pos[y]-][a[i]]-sum[pos[x]][a[i]]&)) num++;
else if (cnt[a[i]]+sum[pos[y]-][a[i]]-sum[pos[x]][a[i]]>) num--;
}
for (int i=x;i<=R[pos[x]];i++) cnt[a[i]]--;
for (int i=L[pos[y]];i<=y;i++) cnt[a[i]]--;
}
lastans=num;
printf("%d\n",num);
}
return ;
}
BZOJ2821 作诗(分块)的更多相关文章
- [BZOJ2821]作诗(分块)
题意 N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次对于100%的数据,1≤n,c,m≤105 题解 (传说lyd省选的时候看错题 把题看成这个了 从此又多了一道分块神题)把N个数 ...
- 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][ ...
- 洛谷P4135 作诗 (分块)
洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...
- BZOJ2821 作诗(Poetize) 分块
题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法 查询的内容: 区 ...
- 2018.09.30 bzoj2821: 作诗(Poetize)(分块)
传送门 分块经典题目. 先将数列分块. 然后预处理出每两个块之间有多少个数出现了正偶数次. 这样查询的时候对于中间的完整块直接用预处理出的数组搞定. 剩下的暴力枚举求解. 代码: #include&l ...
- bzoj2821作诗
http://www.lydsy.com/JudgeOnline/problem.php?id=2821 分块 我们把数列分成$\sqrt{N}$块 记$f[i][j]$表示第i块到第j块的答案,这个 ...
- BZOJ2821 作诗(Poetize) 主席树 bitset
原文链接https://www.lydsy.com/JudgeOnline/problem.php?id=2821 题目传送门 - BZOJ2821 题意 $n$ 个数,$m$ 组询问,每次问 $[l ...
- bzoj2821: 作诗(Poetize)
分块 分sqrt(n)块 F[i][j]表示块i到块j的答案 s[i][j]表示数字i在前j块内出现了几次 #include <iostream> #include <cstdio& ...
随机推荐
- maven 插
一.maven插件元素 <?xml version="1.0" encoding="utf-8"?> <plugin> <!--插 ...
- (转)PostgreSQL pg_dump&psql 数据的备份与恢复
转自:https://www.cnblogs.com/chjbbs/p/6480687.html Usage: pg_dump [OPTION]... [DBNAME] 数据库名放最后,不指定默认 ...
- 在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
原文:在WPF中使用Caliburn.Micro搭建MEF插件化开发框架 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/a ...
- 一次永久解决cmd窗口汉字显示乱码
对于编译出的程序,在 cmd 和 power shell 运行时都不能正确显示汉字. 网上查,可以再命令窗口修改: 1.打开CMD.exe命令行窗口 2.通过 chcp命令改变代码页,UTF-8的代码 ...
- (代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
上一篇讲解了基础文件IO的理论发展,这里结合java看看各项理论的具体实现. 传统IO-intsmaze 传统文件IO操作的基础代码如下: FileInputStream in = new FileI ...
- Log4net_配置
Log4net 有三个主要组件:loggers,appenders 和 layouts.这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信息的写 ...
- OpenVPN简单部署笔记
打算在IDC机房部署VPN环境,Openvpn也是一个不错的选择:开源,好用,而且免费. OpenVPN简单介绍OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network ...
- Redis+TwemProxy(nutcracker)集群方案部署记录
Twemproxy 又称nutcracker ,是一个memcache.Redis协议的轻量级代理,一个用于sharding 的中间件.有了Twemproxy,客户端不直接访问Redis服务器,而是通 ...
- PHP从入门到精通(一)
(一)PHP简介和基本知识 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于 ...
- 总结and规划
不知不觉中又过去了一年,马上就要读研究生了,因此有必要对自己进行必要的总结,以及对自己有个良好的规划. 首先,描述自己当前的心情——对未来充满了恐惧和焦虑. 马上大学就要毕业了,回首经历的大学生涯,似 ...