bzoj2906
显然分块,由于颜色也有区间,我们的ans[l,r,k]表示块l和块r颜色1~k的权值和
所以我们块的大小要设为n^(2/3),其它没什么说的,比较水
var f:array[..,..,..] of int64;
g:array[..,..] of longint;
s:array[..] of longint;
a,be,q:array[..] of longint;
ans,size,t,tot,i,l,r,n,m,te,x,y:longint; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; procedure prework;
var i,j,k:longint;
begin
for i:= to n do
inc(g[be[i],a[i]]);
for i:= to t do
for j:= to m do
g[i,j]:=g[i-,j]+g[i,j];
for i:= to t do
begin
for j:=(i-)*size+ to n do
begin
if j mod size= then
begin
for k:= to m do
f[i,be[j],k]:=f[i,be[j]-,k];
end;
inc(f[i,be[j],a[j]],s[a[j]]*+);
inc(s[a[j]]);
end;
for j:=i to t do
for k:= to m do
inc(f[i,j,k],f[i,j,k-]);
fillchar(s,sizeof(s),);
end;
end; procedure clear;
var i:longint;
begin
for i:= to tot do
s[q[i]]:=;
end; function ask(l,r,x,y:longint):int64;
var i:longint;
begin
tot:=;
ask:=;
if be[l]=be[r] then
begin
for i:=l to r do
if (a[i]>=x) and (a[i]<=y) then
begin
if s[a[i]]= then
begin
inc(tot);
q[tot]:=a[i];
end;
ask:=ask+s[a[i]]*+;
inc(s[a[i]]);
end;
clear;
end
else begin
ask:=f[be[l]+,be[r]-,y]-f[be[l]+,be[r]-,x-];
for i:=l to be[l]*size do
if (a[i]>=x) and (a[i]<=y) then
begin
if s[a[i]]= then
begin
inc(tot);
q[tot]:=a[i];
s[a[i]]:=g[be[r]-,a[i]]-g[be[l],a[i]];
end;
ask:=ask+s[a[i]]*+;
inc(s[a[i]]);
end;
for i:=(be[r]-)*size+ to r do
if (a[i]>=x) and (a[i]<=y) then
begin
if s[a[i]]= then
begin
inc(tot);
q[tot]:=a[i];
s[a[i]]:=g[be[r]-,a[i]]-g[be[l],a[i]];
end;
ask:=ask+s[a[i]]*+;
inc(s[a[i]]);
end;
clear;
end;
end; begin
readln(n,m,te);
size:=;
while size*size/n*size<n do inc(size);
dec(size);
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);
prework;
for i:= to te do
begin
readln(l,r,x,y);
l:=l xor ans;
r:=r xor ans;
x:=x xor ans;
y:=y xor ans;
if l>r then swap(l,r);
if x>y then swap(x,y);
ans:=ask(l,r,x,y);
writeln(ans);
end;
end.
bzoj2906的更多相关文章
- 【bzoj2906】颜色 分块
题目描述 给定一个长度为N的颜色序列C,对于该序列中的任意一个元素Ci,都有1<=Ci<=M.对于一种颜色ColorK来说,区间[L,R]内的权值定义为这种颜色在该区间中出现的次数的平方, ...
- bzoj2906 颜色 分块+块大小分析
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2906 题解 如果可以离线的话,那么这个题目就是一个莫队的裸题. 看上去这个数据范围也还会一个根 ...
- [BZOJ2906]「颜色」
为什么C++ (11)-O2如此之快,直接优化1000ms... 强制在线,只能分块了. 本题应当预处理出每个块到后面几个块的每种数的平方与数量的前缀和. 由于空间限制,块长只能开到n的2/3次方, ...
随机推荐
- [ Web Service ] [ SOAP ] [ JSON ] [ XML ] 格式轉換
JSON格式產生器_Demo JSON格式產生器_ObjGen - Live JSON Generator JSON格式整理_JSON Formatter & Validator Online ...
- php异步加载、多线程fsockopen()、fputs()
index.php <?php function test() { $fp=fsockopen("localhost", 80, $errno, $errstr, 30); ...
- .NET基础之深度复制和浅度复制
之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉. 如果大家不懂值类型和引用类型的区别,请先看http://www.cnblogs.com/Autumo ...
- js中的计时器
在JS中做二级菜单时,被一个鼠标移出时隐藏的小问题困扰了很久. <script> function Menu(id){ var _this=this; this.obj=document. ...
- fedora 禁止nouveau加载
To remove / disable nouveau drivers from kernel initramfs ## Backup old initramfs nouveau image ## m ...
- The method of type must override a superclass method
导入android项目时,报The method of type must override asuperclass method 一堆错误, 解决方法: 将编译的jdk与使用的jdk版本一致即可.
- div中加入iframe,可以实现Ajax的功能
div中加入iframe,可以实现Ajax的功能,如果查询的时候,比如说城市的选择,用Ajax去实现, 在.net 可以考虑用UpdatePanel,但是点击了查询刷新表格(表格需要重新刷新加载,非纯 ...
- Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.1
在上篇 Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.0 已经对Win8.1和WP8.1部分扩展通用类库做了说明,这篇继续对通用类库做扩展.写的 ...
- iOS视频压缩存储至本地并上传至服务器-b
最近做了一个项目,我把其中的核心功能拿出来和大家分享一下,重点还是自己梳理一下. 这里关于视频转码存储我整理了两个方法,这两个方法都是针对相册内视频进行处理的. 1.该方法没有对视频进行压缩,只是将视 ...
- 苹果Mac操作系统下怎么显示隐藏文件
对于新手而已民,苹果的MAC操作系统刚用时用得很不习惯,比如想要显示被隐藏的文件时,不像windows有个“文件夹选项”对话框可以来设置,百度出来的结果都是用命令来操作,但我建议不要用命令去操作, ...