显然分块,由于颜色也有区间,我们的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的更多相关文章

  1. 【bzoj2906】颜色 分块

    题目描述 给定一个长度为N的颜色序列C,对于该序列中的任意一个元素Ci,都有1<=Ci<=M.对于一种颜色ColorK来说,区间[L,R]内的权值定义为这种颜色在该区间中出现的次数的平方, ...

  2. bzoj2906 颜色 分块+块大小分析

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2906 题解 如果可以离线的话,那么这个题目就是一个莫队的裸题. 看上去这个数据范围也还会一个根 ...

  3. [BZOJ2906]「颜色」

    为什么C++ (11)-O2如此之快,直接优化1000ms... 强制在线,只能分块了. 本题应当预处理出每个块到后面几个块的每种数的平方与数量的前缀和. 由于空间限制,块长只能开到n的2/3次方, ...

随机推荐

  1. 漫谈php全局变量Global

    global语句的作用是定义全局变量,例如如果想在函数内访问全局作用域内的变量则可以通过global声明来定义. 下面从语法解释开始分析. 1. 词法解析 查看 Zend/zend_language_ ...

  2. 关于Javascript"数组"那点事儿

    记住Javascript里没有“数组”忘掉一切吧,骚年...一切都是对象:书中还细分了下简单类型和对象类型基本类型:typeof xxx => "number"数字,&quo ...

  3. NSInvocation的使用(转)

    转载自:http://www.cnblogs.com/pengyingh/articles/2359199.html http://blog.iosxcode4.com/?p=125 在 iOS中可以 ...

  4. 分类-Category

    1.基本用途 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 继承 分类(Category) 2.格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分 ...

  5. 【BZOJ [1878】[SDOI2009]HH的项链

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...

  6. sql之独立子查询和相关子查询总结

    1.独立子查询:顾名思义:就是子查询和外层查询不存在任何联系,是独立于外层查询的: 下面就看一个例子: 有一张订单表 Sales.Order 和一张 客户表 Sales.Customer 下面的sql ...

  7. bnuoj 27987 Record of the Attack at the Orbit (模拟)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=27987 [题意]:给定坐标输出图形 [题解]:处理坐标上的小技巧 [code]: #include ...

  8. java多态与异常处理——动手动脑

    编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”.“及格”.“中”.“良”.“优”的结论. 要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都 ...

  9. ArcGIS Engine实现LAS数据集转RASTER

    ArcGIS 10.1版本开始提供了将LAS数据集转换为栅格的新功能,最近在做LAS数据处理时通过ArcGIS Engine10.1+C#实现了LAS数据集转RASTER,既然ArcGIS DeskT ...

  10. MongoDB 学习

    MongoDB 的官方网站 :https://www.mongodb.org 可通过官方网站下载相应的文件 下载之后对文件进行解压 http://www.cnblogs.com/huangxinche ...