Pagini recente » Cod sursa (job #1250200) | Monitorul de evaluare | Cod sursa (job #86812) | Cod sursa (job #926880) | Cod sursa (job #1336310)
#include <fstream>
#include <cstring>
#define DIM 100005
#define bit(x) ((x&(x-1))^x)
using namespace std;
ifstream fin("baruri.in");
ofstream fout("baruri.out");
int N,AIB[DIM],M,T;
void add(int x,int val){
for(int i=x;i<=N;i+=bit(i))
AIB[i]+=val;
}
int suma(int x){
int sum=0;
for(int i=x;i>0;i-=bit(i))
sum+=AIB[i];
return sum;
}
int main(){
fin>>T;
while(T--){
fin>>N;
memset(AIB,0,sizeof(AIB));
for(int i=1;i<=N;i++){
int x;
fin>>x;
add(i,x);
}
fin>>M;
while(M--){
int op,a,b,c;
fin>>op;
if(op==0){
fin>>a>>b;
int S=0;
S+=suma(max(a-1,0))-suma(max(a-b-1,0));
S+=suma(min(a+b,N))-suma(min(a,N));
fout<<S<<"\n";
}
if(op==1){
fin>>a>>b;
add(b,a);
}
if(op==2){
fin>>a>>b;
add(b,-a);
}
if(op==3){
fin>>a>>b>>c;
add(b,-a);
add(c,a);
}
}
}
fin.close();fout.close();
return 0;
}