【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次, ...
随机推荐
- WPF黑色背景下常用控件样式
平时工作用 自己整理的 代码等找到合适的上传空间在进行同步
- kindeditor文本编辑器乱码中乱码问题解决办法
这个问题我已经解决掉了,不是更改内容的编码格式,只要将lang/zh_CN.js 这个文件的编码转换成unicode即可 操作方法是 用记事本打开这个文件,另存为,然后更改文件的编码格式为unico ...
- linux下创建公钥
# linux下创建公钥 链接地址:https://www.cnblogs.com/ibyte/p/6086630.html 示例: scp -r /home/yutang/.ssh/id_rsa.p ...
- js原生_获取url键值对
思路: 1.先对url进行处理,获取 ?后的字符串 postid=10457794&actiontip=保存修改成功') 2. 字符串通过&标识,不同参数转为数组 ["pos ...
- 集成Bmob推送
Write By lz: 转发请注明原文地址: http://www.cnblogs.com/lizhilin2016/p/6952217.html Lz 寄语: Bmob 奇葩推送, 大坑, 想要 ...
- 23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等
来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.Wec ...
- hdu1507 最大匹配
题目大意: 在 n*m在矩阵中,有一些点被标记为黑色,问可以多少对相邻的没有重复的白色块. 思路: 看上去与二分匹配毫无关系.但是没有其他好的解法,转化为二分匹配是正解.二分匹配的条件是{X,Y|E} ...
- css round corner div and transition
看stackoverflow上的圆角标签挺好看,自己动手试了下,用的属性是border-radius(即边框圆角半径,用px):加上transition effect,代码如下: <!DOCTY ...
- DB2 char长度问题
问题:发现用char转换了后的值长度都变为了11,更长的变为了254
- CBIR--Survey.C/GPU优化.Sys搭建
一:CBIR综述:转自于wiki:http://zh.wikipedia.org/wiki/CBIR 参考链接:http://blog.csdn.net/kezunhai/article/detail ...