bzoj2821
其实和bzoj2724是一样的
都是先处理多个块的答案,然后多余部分暴力
空间要注意一下,还是O(nsqrt(n));
var f:array[..,..] of longint;
g:array[..,..] of longint;
a,s,be:array[..] of longint;
t,n,p,m,i,x,y,ans,size:longint; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure pre;
var i,j,k:longint;
begin
for i:= to t do
begin
k:=min(n,i*size);
g[i]:=g[i-];
for j:=(i-)*size+ to k do
inc(g[i,a[j]]);
end;
for i:= to t do
begin
fillchar(s,sizeof(s),);
for j:=(i-)*size+ to n do
begin
inc(s[a[j]]);
if j=(be[j]-)*size+ then
f[i,be[j]]:=f[i,be[j]-];
if s[a[j]]>= then
if s[a[j]] mod = then dec(f[i,be[j]]) else inc(f[i,be[j]]);
end;
end;
end; procedure clear(x,y:longint);
var i:longint;
begin
for i:=x to y do
s[a[i]]:=;
end; function ask(x,y:longint):longint;
var i:longint;
begin
ask:=;
if be[x]=be[y] then
begin
for i:=x to y do
begin
inc(s[a[i]]);
if s[a[i]]>= then
if s[a[i]] mod = then dec(ask) else inc(ask);
end;
clear(x,y);
end
else begin
ask:=f[be[x]+,be[y]-];
for i:=x to be[x]*size do
begin
if s[a[i]]= then s[a[i]]:=g[be[y]-,a[i]]-g[be[x],a[i]];
inc(s[a[i]]);
if s[a[i]]>= then
if s[a[i]] mod = then dec(ask) else inc(ask);
end;
for i:=(be[y]-)*size+ to y do
begin
if s[a[i]]= then s[a[i]]:=g[be[y]-,a[i]]-g[be[x],a[i]];
inc(s[a[i]]);
if s[a[i]]>= then
if s[a[i]] mod = then dec(ask) else inc(ask);
end;
clear(x,be[x]*size);
clear((be[y]-)*size+,y);
end;
end; begin
readln(n,p,m);
size:=trunc(sqrt(n));
for i:= to n do
begin
read(a[i]);
be[i]:=(i-) div size+;
end;
t:=n div size;
if n mod size<> then inc(t);
pre;
fillchar(s,sizeof(s),);
for i:= to m do
begin
readln(x,y);
x:=(x+ans) mod n+;
y:=(y+ans) mod n+;
if x>y then swap(x,y);
ans:=ask(x,y);
writeln(ans);
end;
end.
bzoj2821的更多相关文章
- 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 作诗(分块)
		和区间众数几乎一模一样的套路. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include&l ... 
- BZOJ2821 作诗(Poetize) 【分块】
		BZOJ2821 作诗(Poetize) Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI ... 
- bzoj2821: 作诗(Poetize)
		分块 分sqrt(n)块 F[i][j]表示块i到块j的答案 s[i][j]表示数字i在前j块内出现了几次 #include <iostream> #include <cstdio& ... 
- 【BZOJ2821】作诗(Poetize) 分块
		Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ... 
- 【分块】BZOJ2821 作诗(Poetize)
		2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3265 Solved: 951[Submit][Status][ ... 
- BZOJ2821 作诗(Poetize) 分块
		题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法  查询的内容: 区 ... 
- 2018.09.30  bzoj2821: 作诗(Poetize)(分块)
		传送门 分块经典题目. 先将数列分块. 然后预处理出每两个块之间有多少个数出现了正偶数次. 这样查询的时候对于中间的完整块直接用预处理出的数组搞定. 剩下的暴力枚举求解. 代码: #include&l ... 
随机推荐
- log4j的properties详细配置,分级输出日志文件
			log4j是很常用的日志类包,在此做一下配置的记录 加载jar包和properities配置文件 将commons-logging.jar和logging-lo ... 
- POJ 1845 Sumdiv(因子分解+快速幂+二分求和)
			题意:给你A,B,让求A^B所有的因子和模上9901 思路:A可以拆成素因子的乘积: A = p1^x1 * p2^x2 *...* pn^xn 那么A^B = p1^(B*x1) * p2^(B*x ... 
- day-7
			/* 倒数7天了 某一天 某一刻 某次呼吸 我们终将再分离 而我的 自传里 曾经有你 没有遗憾的诗句 诗句里 充满感激 (小仙女博客抄来的233) 是啊 就快要结束了 曲终人散 上午被错误数据卡了一小 ... 
- (转)C# 中的委托和事件
			来源:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-In-CSharp.aspx 引言 委托 和 事件在 .Net ... 
- document library\ picture library\Asset Library的默认文件夹
			document library\ picture library\Asset Library的默认文件夹? document library 默认文件夹:Forms picture library默 ... 
- 【Windows】Windows中的数据类型以及命名
			一.大写标示符 Windows中的很多标识符都是以两个或者三个大写字母作为前缀的,且其后紧跟一个下划线.这些标识符都是常量数值,前缀表明该常量的一般类别.如下 前缀 常量 CS(Class Style ... 
- 使用Delphi读取网络上的文本文件,html文件
			使用Delphi读取网络上的txt和html文件 可以使用两种方法: 1.下载文件,然后进行读取 下载文件的Delphi代码可以参考: http://www.delphibbs.com/delphib ... 
- 详细介绍Linux shell脚本基础学习
			Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ... 
- QVW中实现日期区间的选择功能!
			QV在日期的选择上不是很灵活,日期区段的选择可以在列表框中直接用鼠标拖拉区段,如果跨周期比较长了还是不是很方便啦. 下面介绍的方式是完全实现了起始日期的选择功能. 注:日期这个字段在抽取的时候一定要格 ... 
- C++学习笔记-1-自增和自减运算符
			1. post-increment and pre-increment 的区别 来源:http://www.c4learn.com/c-programming/c-increment-operator ... 
