裸题分块。

 #include <bits/stdc++.h>
using namespace std; int a[],b[],n,m,t1,t2,t3,t4,sq; int main(){
ios::sync_with_stdio(false);
cin>>n;
sq=(int)sqrt(n);
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) {
cin>>t1>>t2>>t3>>t4;
if(t1==){
if((t2-)/sq+ == (t3-)/sq+) {
for(int j=t2;j<=t3;j++)
a[j]+=t4;
}
else {
for(int j=t2;j<=((t2-)/sq)*sq+sq;j++)
a[j]+=t4;
for(int j=((t3-)/sq)*sq+;j<=t3;j++)
a[j]+=t4;
for(int j=(t2-)/sq++;j<(t3-)/sq+;j++)
b[j]+=t4;
}
}
else{
printf("%d\n",a[t3]+b[(t3-)/sq+]);
}
}
}
05-17 05:06