Pagini recente » Cod sursa (job #500403) | Cod sursa (job #1906831) | Cod sursa (job #1702110) | Cod sursa (job #938706) | Cod sursa (job #1058527)
#include<fstream>
#define maxnod 32799//(1<<15)=32768
using namespace std;
ifstream fi("datorii.in");
ofstream fo("datorii.out");
int i,n,m,arb[maxnod];
int oper,a,b,x,poz,q;
void creare_arb(int nod,int st,int dr){
if (st==dr) fi>>arb[nod];
else{
creare_arb(2*nod,st,(st+dr)/2);
creare_arb(2*nod+1,(st+dr)/2+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
}
void query(int nod,int st,int dr){
if(a<=st && dr<=b){
q+=arb[nod];
}
else{
int mijl=(st+dr)/2;
if(a<=mijl) query(2*nod,st,mijl);
if(mijl+1<=b) query(2*nod+1,mijl+1,dr);
}
}
void update(int nod,int st,int dr){
if(st==dr) arb[nod]-=x;
else{
int mijl=(st+dr)/2;
if(poz<=mijl) update(2*nod,st,mijl);
else update(2*nod+1,mijl+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
}
int main(){
fi>>n>>m;
creare_arb(1,1,n);
for(i=1;i<=m;i++){
fi>>oper;
if(oper==1){
fi>>a>>b; q=0;
query(1,1,n);
fo<<q<<"\n";
}
else{
fi>>poz>>x;
update(1,1,n);
}
}
fi.close();
fo.close();
return 0;
}