LOJ 数列分块入门系列
目录 1.区间加+单点查 每个块维护tag,散的暴力改。 code: #include<bits/stdc++.h> using namespace std; const int maxn=50010; const int maxt=250; int n,t,cnt; int a[maxn],tag[maxt],L[maxt],R[maxt],pos[maxn]; inline void add(int ql,int qr,int k) { if(pos[ql]==pos[qr]) { for(int i=ql;i<=qr;i++)a[i]+=k; return; } for(int i=ql;i<=R[pos[ql]];i++)a[i]+=k; for(int i=L[pos[qr]];i<=qr;i++)a[i]+=k; if(pos[ql]+1<=pos[qr]-1)for(int i=pos[ql]+1;i<=pos[qr]-1;i++)tag[i]+=k; } int main() { scanf("%d",&n); t=sqrt(n);cnt=n/t; if(n%t)cnt++; for(int i=1;i<=cnt;i++)L[i]=(i-1)*t+1,R[i]=min(i*t,n); for(int i=1;i<=n;i++)pos[i]=(i-1)/t+1;