Description

有一个长度为n的序列,序列每个元素的范围[1,c],有m个询问x y,表示区间[x,y]中出现正偶数次的数的种类数。

Solution

大力分块解决问题。

把序列分块,f[i][j]表示第i块到第j块的答案,并记录块的前缀数的出现次数。

f[i][j]直接暴力算,块的前缀数的出现次数也可以直接算,都是nsqrt(n)。

遇到询问x y,中间答案的块可以直接统计,然后再暴力统计左右两边零碎的贡献,也是nsqrt(n)。

Code

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath> using namespace std; #define REP(i, a, b) for (int i = (a), i##_end_ = (b); i <= i##_end_; ++i)
const int maxn = 1e5+;
int n, c, m, a[maxn];
int bel[maxn], l[maxn], r[maxn];
int cnt[][maxn], s_block, t[maxn], f[][]; int solve(int x, int y)
{
int L = bel[x], R = bel[y];
if (L == R)
{
REP(i, x, y) t[a[i]] = ;
int ret = ;
REP(i, x, y) if (t[a[i]] ++) ret += (t[a[i]]&) ? - : ;
return ret;
}
else
{
int ret = f[L+][R-];
REP(i, x, r[L]) t[a[i]] = ;
REP(i, l[R], y) t[a[i]] = ;
REP(i, x, r[L]) if (!t[a[i]]) t[a[i]] = cnt[R-][a[i]]-cnt[L][a[i]];
REP(i, l[R], y) if (!t[a[i]]) t[a[i]] = cnt[R-][a[i]]-cnt[L][a[i]];
REP(i, x, r[L]) if (t[a[i]] ++) ret += (t[a[i]]&) ? - : ;
REP(i, l[R], y) if (t[a[i]] ++) ret += (t[a[i]]&) ? - : ;
return ret;
}
} int main()
{
scanf("%d %d %d", &n, &c, &m);
REP(i, , n) scanf("%d", &a[i]);
int block = int(sqrt(n));
REP(i, , n)
{
bel[i] = i/block+, r[bel[i]] = i;
if (i == || bel[i] != bel[i-]) l[bel[i]] = i;
}
s_block = n/block+;
REP(i, , s_block)
{
REP(j, , c) t[j] = ;
REP(j, i, s_block)
{
f[i][j] = (j == i) ? : f[i][j-];
REP(k, l[j], r[j]) if (t[a[k]] ++) f[i][j] += (t[a[k]]&) ? - : ;
}
}
REP(i, , s_block)
{
REP(j, , c) cnt[i][j] = cnt[i-][j];
REP(j, l[i], r[i]) cnt[i][a[j]] ++;
}
int x, y, ans = ;
while (m --)
{
scanf("%d %d", &x, &y);
x = (x+ans)%n+, y = (y+ans)%n+;
if (x > y) swap(x, y);
printf("%d\n", ans = solve(x, y));
}
return ;
}

BZOJ 2821作诗(Poetize) 分块的更多相关文章

  1. 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 ...

  2. [BZOJ 2821] 作诗(Poetize) 【分块】

    题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...

  3. 2821: 作诗(Poetize)

    2821: 作诗(Poetize) Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1078  Solved: 348[Submit][Status] ...

  4. 【BZOJ2821】作诗(Poetize) 分块

    Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...

  5. [BZOJ 2821] 作诗

    Link: BZOJ 2821 传送门 Solution: 一道类似区间众数的经典分块 由于个数为偶数这样的条件不能支持快速合并 因此要先$O(n*sqrt(n))$预处理出$pre[i][j]$表示 ...

  6. bzoj 2821 作诗 分块

    基本思路和蒲公英一样 还是预处理出每两个块间的答案 询问时暴力跑两边的贡献 #include<cstdio> #include<cstring> #include<ios ...

  7. BZOJ2821 作诗(Poetize) 分块

    题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法 ​ 查询的内容: 区 ...

  8. 【分块】BZOJ2821 作诗(Poetize)

    2821: 作诗(Poetize) Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 3265  Solved: 951[Submit][Status][ ...

  9. BZOJ2821 作诗(Poetize) 【分块】

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

随机推荐

  1. 深度学习 vs. 概率图模型 vs. 逻辑学

    深度学习 vs. 概率图模型 vs. 逻辑学 摘要:本文回顾过去50年人工智能(AI)领域形成的三大范式:逻辑学.概率方法和深度学习.文章按时间顺序展开,先回顾逻辑学和概率图方法,然后就人工智能和机器 ...

  2. MongoDB探索之路(二)——系统设计之CRUD

    1.构造实体类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  3. 小议 html 实体解析

    今天分享个小技巧,是群里一个朋友问的,"请问 + 这种类型的字符串怎么转换成我们想要的字符 + ,有什么简便的js方法吗"其实问题说简单也简单,说难也难.我们要分情况来描述问题解决 ...

  4. HTML5 移动开发(移动设备检测及对HTML5的支持)

    1.如何选择要使用的特性以及所面向的浏览器 2.哪些浏览器支持HTML5 3.如何检测是否支持HTML5 4.如何开发贷容错性的Web应用程序 5.CSS3媒体查询如何增强检测脚本   使用HTML5 ...

  5. Linux - sed 文本操作

    SED 是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大. sed全称是:Stream EDitor 调用sed命令有两种 ...

  6. HDU 2680 Choose the best route 最短路问题

    题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少. 解题报告:这道题的特 ...

  7. HDU 2073 无限的路 (模拟)

    题目链接 Problem Description 甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形: 甜甜的好朋友蜜蜜发现 ...

  8. asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换

    物理路径:磁盘路径,也就是在磁盘上的位置. 虚拟路径:web页面上的路径,是相对于应用程序而言的. /// 将物理路径转换成相对路径           /// </summary>   ...

  9. 为什么mysqlbinlog --database选项不起作用

    群里看到有同学提问,多瞅了眼 [root@mysql55 mysql]# mysqlbinlog --no-defaults -vv --base64-output=decode-rows mysql ...

  10. Mysql字符集介绍