bzoj2906】的更多相关文章

显然分块,由于颜色也有区间,我们的ans[l,r,k]表示块l和块r颜色1~k的权值和所以我们块的大小要设为n^(2/3),其它没什么说的,比较水 ..,..,..] of int64; g:..,..] of longint; s:..] of longint; a,be,q:..] 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…
题目描述 给定一个长度为N的颜色序列C,对于该序列中的任意一个元素Ci,都有1<=Ci<=M.对于一种颜色ColorK来说,区间[L,R]内的权值定义为这种颜色在该区间中出现的次数的平方,即区间[L,R]内中满足Ci=ColorK的元素个数的平方.接下来给出Q个询问,询问区间[L,R]内颜色[a,b]的权值总和. 输入 第1行三个整数N,M,Q.分别代表序列长度,颜色总数和询问总数. 第2行N个整数,代表序列Ci. 第3行到第Q+2行,每行4个整数l,r,a,b.记上一次计算出的答案为Lans…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2906 题解 如果可以离线的话,那么这个题目就是一个莫队的裸题. 看上去这个数据范围也还会一个根号算法,所以考虑分块. 每一次询问,我们需要知道整块的答案.如果单独知道整块看上去不太好搞,所以可以预处理整块到整块的答案.令 \(c[i][j][k]\) 表示从 \(i\) 块到 \(j\) 块 \(\leq k\) 的答案,询问的时候 \(ans\) 先加上中间整块的 \(c\) 值,然后枚举…
为什么C++ (11)-O2如此之快,直接优化1000ms... 强制在线,只能分块了. 本题应当预处理出每个块到后面几个块的每种数的平方与数量的前缀和. 由于空间限制,块长只能开到n的2/3次方, 最重要的一点,开O2!!! Code: #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using namespace…