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& ...
随机推荐
- 关于window.onload()的加载问题
今天写了个js的demo,遇到了个小问题,后来发现是自己对window.onload()的具体用处不是太清楚,现在跟大家分享一下. <head> <meta http-equiv=& ...
- 解决Skyline6.5多球对比时,自动运行TerraExplorer软件的问题
如果你的操作系统是Win7 64位,在运行Skyline6.5提供的ITE3DWindowEx控件实现多球对比时,启动程序调试运行时,却自动运行了TerraExplorer软件, 这时候你会发现for ...
- Attention[Content]
0. 引言 神经网络中的注意机制就是参考人类的视觉注意机制原理.即人眼在聚焦视野区域中某个小区域时,会投入更多的注意力到这个区域,即以"高分辨率"聚焦于图像的某个区域,同时以&qu ...
- Ubuntu16.04中搭建TFTP 和 NFS 服务器
Ubuntu 16.04中搭建TFTP服务 1. 安装 $ apt-get install tftp-hpa tftpd-hpa 2. 建立目录 $ mkdir /tftpboot # 这是建立t ...
- sql语句 update
UPDATE ban_group AS A SET NAME ='锅炉三班' FROM hr_employee AS b WHERE b.job_no = '1394' AND A ...
- odoo11新开发功能模块测试指南
根据实际业务需要,我们开发了一些生产实务中一些功能模块,作为制造行业管理信息化解决方案的基础,并应部分客户需求,做了测试系统,现将测试方式公布如下: 一.测试环境 服务器地址 http://106.1 ...
- JVM调优——之CMS 常见参数解析
最近在学习使用CMS这个GC,这里记录下常用的参数. 1. UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 有一点需要注意的是:C ...
- Ionic App 启动时报Application Error - The connection to the server was unsuccessful
最近在更新App的时候,发现在华为手机上报这个错误,有点困惑,查找资料分析,大概原因是程序在加载index.html网页时,加载的资源过多,造成时间超时, 这个时原因分析https://stackov ...
- iOS开发简记(1):指定APP的图标与启动图
各位兄弟姐妹们,早上好,本人花了将近一个月的时间打造了一个完整的IOS版的App, 期间包括开发,测试,上线审核,现在花点时间把实现的过程分享给大家,“知音”app功能简单,适合对象为初学者,后面我会 ...
- JDK8漫谈——代码更优雅
简介 lambda表达式,又称闭包(Closure)或称匿名方法(anonymous method).将Lambda表达式引入JAVA中的动机源于一个叫"行为参数"的模式.这种模式 ...