Mai intai trebuie sa te autentifici.
Cod sursa(job #202047)
Utilizator | Data | 5 august 2008 19:13:10 | |
---|---|---|---|
Problema | Datorii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.96 kb |
#include <stdio.h>
#define N 15001
int n,m,t[3*N],a,b,poz,val,x,s;
void actual(int p,int u,int i){
t[i]-=val;
if(p==u){
// t[i]-=val;
return;
}
int m=(p+u)>>1;
if(poz<=m)
actual(p,m,i*2);
else
actual(m+1,u,i*2+1);
//t[i]=t[i*2]+t[i*2+1];
}
void actual1(int p,int u,int i){
if(p==u) {
t[i]=val;
return ;
}
int m=(p+u)>>1;
if(poz<=m)
actual1(p,m,i*2);
else
actual1(m+1,u,i*2+1);
t[i]=t[i*2]+t[i*2+1];
}
void suma(int p,int u,int i){
if(a<=p && u<=b){
s+=t[i];
return ;
}
int m=(p+u)>>1;
if(a<=m)
suma(p,m,i*2);
if(b>m) suma(m+1,u,i*2+1);
}
int main(){
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
for(poz=1;poz<=n;poz++){
scanf("%d",&val);
actual1(1,n,1);
}
for(;m;m--){
scanf("%d%d%d",&x,&a,&b);
if(x==1) {
s=0;
suma(1,n,1);
printf("%d\n",s);
}
else {
poz=a;
val=b;
actual(1,n,1);
}
}
return 0;
}