【BZOJ 2821】作诗
【题目链接】
https://www.lydsy.com/JudgeOnline/problem.php?id=2821
【算法】
如果不强制在线,显然莫队是可以解决此题的,那么,强制在线怎么办呢? 分块
将这个序列分成sqrt(n)段(sqrt表示开方),预处理每段每个数出现的次数与该段“多少数出现了正偶数次”,就可以在线回答询问了
【代码】
#include<bits/stdc++.h>
using namespace std;
const int MAXN = ;
const int MAXB = ; int i,n,m,c,l,r,x,y,len,block,lastans;
int a[MAXN],belong[MAXN],cnt[MAXN],L[MAXB],R[MAXB];
int sum[MAXB][MAXN],ans[MAXB][MAXB]; inline void init()
{
int i,j,k;
len = (int)sqrt(n);
block = n / len;
for (i = ; i <= block; i++)
{
L[i] = (i - ) * len + ;
R[i] = i * len;
}
if (R[block] < n)
{
block++;
L[block] = R[block-] + ;
R[block] = n;
}
for (i = ; i <= n; i++) belong[i] = (i - ) / len + ;
for (i = ; i <= n; i++) sum[belong[i]][a[i]]++;
for (i = ; i <= block; i++)
{
for (j = ; j <= c; j++)
{
sum[i][j] += sum[i-][j];
}
}
for (i = ; i <= block; i++)
{
for (j = i; j <= block; j++)
{
ans[i][j] = ans[i][j-];
for (k = L[j]; k <= R[j]; k++)
{
cnt[a[k]]++;
if (cnt[a[k]] % == ) ans[i][j]++;
else if (cnt[a[k]] > ) ans[i][j]--;
}
}
for (j = L[i]; j <= n; j++) cnt[a[j]]--;
}
}
inline int query(int l,int r)
{
int i,ret = ,t;
int p = belong[l],
q = belong[r];
if (p == q)
{
for (i = l; i <= r; i++)
{
cnt[a[i]]++;
if (cnt[a[i]] % == ) ret++;
else if (cnt[a[i]] > ) ret--;
}
for (i = l; i <= r; i++) cnt[a[i]]--;
return ret;
} else
{
ret = ans[p+][q-];
for (i = l; i <= R[p]; i++)
{
cnt[a[i]]++;
t = sum[q-][a[i]] - sum[p][a[i]] + cnt[a[i]];
if (t % == ) ret++;
else if (t > ) ret--;
}
for (i = L[q]; i <= r; i++)
{
cnt[a[i]]++;
t = sum[q-][a[i]] - sum[p][a[i]] + cnt[a[i]];
if (t % == ) ret++;
else if (t > ) ret--;
}
for (i = l; i <= R[p]; i++) cnt[a[i]]--;
for (i = L[q]; i <= r; i++) cnt[a[i]]--;
return ret;
}
} int main()
{ scanf("%d%d%d",&n,&c,&m);
for (i = ; i <= n; i++) scanf("%d",&a[i]);
init();
lastans = ;
for (i = ; i <= m; i++)
{
scanf("%d%d",&x,&y);
l = (x + lastans) % n + ;
r = (y + lastans) % n + ;
if (l > r) swap(l,r);
printf("%d\n",lastans = query(l,r));
} return ;
}
【BZOJ 2821】作诗的更多相关文章
- BZOJ 2821: 作诗(Poetize)( 分块 )
分块,分成N^0.5块.O(N^1.5)预处理出sm[i][j]表示前i块中j的出现次数, ans[i][j]表示第i~j块的答案. 然后就可以O(N^0.5)回答询问了.总复杂度O((N+Q)N^0 ...
- [BZOJ 2821] 作诗(Poetize) 【分块】
题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...
- [BZOJ 2821] 作诗
Link: BZOJ 2821 传送门 Solution: 一道类似区间众数的经典分块 由于个数为偶数这样的条件不能支持快速合并 因此要先$O(n*sqrt(n))$预处理出$pre[i][j]$表示 ...
- bzoj 2821 作诗 分块
基本思路和蒲公英一样 还是预处理出每两个块间的答案 询问时暴力跑两边的贡献 #include<cstdio> #include<cstring> #include<ios ...
- BZOJ 2821作诗(Poetize) 分块
Description 有一个长度为n的序列,序列每个元素的范围[1,c],有m个询问x y,表示区间[x,y]中出现正偶数次的数的种类数. Solution 大力分块解决问题. 把序列分块,f[i] ...
- 2821: 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1078 Solved: 348[Submit][Status] ...
- 【分块】BZOJ2821 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3265 Solved: 951[Submit][Status][ ...
- 作诗(bzoj 2821)
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次 ...
- BZOJ2821:作诗——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2821 问题描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好 ...
- 【BZOJ2821】作诗(Poetize) 分块
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...
随机推荐
- Python3没有dict.has_key方法
最近开始学习Python,安装上最新的Python3.3.3照书敲了一个小程序结果报错 'dict' object has no attribute 'has_key' 上网查也找不到解决办法,后来发 ...
- C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据
C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...
- MATLAB 2018a 下载安装
参考链接:https://www.youtube.com/watch?v=BJavEE9KIlY
- Android线程间异步通信机制源码分析
本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务.文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究. 基础 ...
- JDK1.7源码阅读tools包之------ArrayList,LinkedList,HashMap,TreeMap
1.HashMap 特点:基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...
- mysqldump+mydumper+xtrabackup备份原理流程
mysqldump备份原理 备份的基本流程如下: 1.调用FTWRL(flush tables with read lock),全局禁止读写 2.开启快照读,获取此时的快照(仅对innodb表起作用) ...
- SQL2012安装
SQL2012安装 1.打开SQL安装包,点击setup安装 2.选择安装界面,点击全新安装 3.验证通过后,点击确定 4.选择我接受,点击下一步 5.在外网环境,可进行在线更新,内网环境取消勾选产品 ...
- 路飞学城Python-Day79
27-url控制器之path方法 由于基于re_path的路径编写方式是重复性高的编写url,如果规则改变了,则对应的要去修改很多url,这样是很不方便的 所以采用Django2.0的path去编写u ...
- python3发送邮件
import smtplib from email.mime.text import MIMEText from email.utils import formataddr import psutil ...
- 了解http协议
http:超文本传输协议 https:安全超文本传输协议 FTP:文件传输协议 TCP:网络控制协议 IP:互联网协议 UDP:用户数据协议 https协议特点-------------------- ...