傳送門:https://loj.ac/problem/6277c++
首先來講,分塊還沒莫隊好學……(在線捱打)spa
本題就是一個簡單的分塊code
若是要修改的不在任何一個能夠加tag的區間中,就暴力修改blog
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n;int block; 4 int id[50009]; 5 int num[50009]; 6 int tag[10009]; 7 inline int kd() 8 { 9 int x=0,f=1;char ch=getchar(); 10 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 11 while(ch>='0'&&ch<='9'){x=x*10+(ch^48);ch=getchar();} 12 return x*f; 13 } 14 void add(int l,int r,int c) 15 { 16 for(int i=l;i<=min(id[l]*block,r);i++)num[i]+=c; 17 if(id[l]!=id[r])for(int i=(id[r]-1)*block+1;i<=r;i++)num[i]+=c; 18 for(int i=id[l]+1;i<=id[r]-1;i++)tag[i]+=c; 19 } 20 int main() 21 { 22 n=kd(); 23 block=sqrt(n); 24 for(int i=1;i<=n;i++) 25 { 26 num[i]=kd(); 27 id[i]=(i-1)/block+1; 28 } 29 for(int i=1;i<=n;i++) 30 { 31 int o=kd(),a=kd(),b=kd(),c=kd(); 32 if(o==0)add(a,b,c); 33 if(o==1)cout<<num[b]+tag[id[b]]<<endl; 34 } 35 return 0; 36 }