Pagini recente » Cod sursa (job #2169578) | Cod sursa (job #875401) | Cod sursa (job #2105999) | Cod sursa (job #2714317) | Cod sursa (job #3175135)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
const int N=100000;
int v[N], arb[4*N];
void update(int poz){
if(poz<1)
return;
arb[poz]=arb[poz*2]+arb[poz*2+1];
update(poz/2);
}
int query(int capat_st, int capat_dr, int stg, int dr, int poz){
if(capat_st>dr || capat_dr<stg)
return 0;
if(capat_st>=stg && capat_dr<=dr)
return arb[poz];
int mij=(capat_st + capat_dr) / 2;
return query(capat_st, mij, stg, dr, poz*2)+
query(mij+1, capat_dr, stg, dr, poz*2+1);
}
int main()
{
int n,m;
cin>>n>>m;
int log2n=log2(n);
log2n += ((1<<log2n)<n);
int siz=1<<log2n;
for(int i=1; i<=n; i++){
cin>>v[i];
arb[siz+i-1]=v[i];
}
for(int i=siz; i<siz+n; i++)
update(i/2);
for(int i=1; i<=m; i++){
bool op;
cin>>op;
if(op){
int stg,dr;
cin>>stg>>dr;
cout<<query(1,siz,stg,dr,1)<<"\n";
}else{
int zi,s;
cin>>zi>>s;
int poz=siz+zi-1;
arb[poz]-=s;
update(poz/2);
}
}
return 0;
}