Pagini recente » Cod sursa (job #229070) | Cod sursa (job #1804652) | Cod sursa (job #514765) | Cod sursa (job #420155) | Cod sursa (job #226692)
Cod sursa(job #226692)
#include<fstream>
using namespace std;
int arbint[65536];
int n,m;
int poz, val, start, finish;
void update(int nod, int left, int right){
if(left<right){
int m=(left+right)/2;
if(poz<=m) update(nod*2, left, m);
else update(nod*2+1, m+1, right);
arbint[nod]=arbint[nod*2]+arbint[nod*2+1];
}
else{
arbint[nod]+=val;
}
}
int sum;
void query(int nod, int left, int right){
if(start<=left&&right<=finish)
sum += arbint[nod];
else
{
int m=(left+right)/2;
if(start<=m) query(nod*2,left, m);
if(finish>m) query(nod*2+1,m+1,right);
}
}
int main(){
int i,A,B, x;
ifstream f("datorii.in");
ofstream g("datorii.out");
f>>n>>m;
for(i=0;i<n;++i){
f>>x;
poz=i+1; val=x;
update(1,1,n);
}
for(i=0;i<m;i++){
f>>x>>A>>B;
if(x==0){
poz=A;val=-B;
update(1,1,n);
}
else
{
start=A; finish=B;sum=0;
query(1,1,n);
g<<sum<<'\n';
}
}
f.close();
g.close();
return 0;
}