LOJ分块⑨题汇总
从零开始的分块学习系列(感谢hzwer) 题目顺序是我建议的做题顺序 先说一句:分块的核心思想(其实本身分块就可以说是一种思想)是:均摊(或者说平衡/权衡?)复杂度,同时这种思想本身不只局限于序列分块(前一篇解题里有提到) 序列分块之① 区间加法+单点查询 分块入门题 知道分块的思想之后应该都会做,对整块打标记,对不超过块大小的零散区间暴力修改;查询的时候就是原数+所在块的标记 1 #include<cmath> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int N=50005,Sq=230; 7 int a[N],blo[N],laz[Sq],pts[Sq][2]; 8 int n,m,t1,t2,t3,t4,cnt,sqr; 9 int main() 10 { 11 scanf("%d",&n),m=n; 12 pts[cnt=1][0]=1,sqr=sqrt(n)+10; 13 for(int i=1;i<=n;i++) 14 { 15 scanf("%d",&a[i]); 16 blo[i]=(i-1)/sqr+1; 17 if(i%sqr==0) 18 { 19 pts[cnt++][1]=i; 20 pts[cnt][0]=i+1