Pagini recente » Cod sursa (job #2880796) | Cod sursa (job #2190849) | Cod sursa (job #2163753) | Cod sursa (job #2239734) | Cod sursa (job #3248705)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int NMAX=15001;
int v[NMAX],arb[4*NMAX];
void buildtree(int node, int st, int dr){
if(st==dr){
arb[node]=v[st];
}
else{
int mid=(st+dr)/2;
buildtree(node*2, st, mid);
buildtree(node*2+1, mid+1, dr);
arb[node]=arb[node*2]+arb[node*2+1];
}
}
int value,poz;
void update(int node, int st, int dr){
if(st==dr && st==poz){
arb[node]-=value;
}
else{
int mid=(st+dr)/2;
if(poz<=mid){
update(node*2,st,mid);
}
else{
update(node*2+1,mid+1,dr);
}
arb[node]=arb[node*2]+arb[node*2+1];
}
}
int query(int node, int st, int dr, int sq, int dq){
if(sq>dr or dq<st){
return 0;
}
if(sq<=st && dr<=dq){
return arb[node];
}
else{
int mid=(st+dr)/2;
int left_sum=query(node*2,st,mid,sq,dq);
int right_sum=query(node*2+1,mid+1,dr,sq,dq);
return left_sum+right_sum;
}
}
int main()
{
int n,q,a,b;
bool type;
fin>>n>>q;
for(int i=1; i<=n; ++i){
fin>>v[i];
}
buildtree(1,1,n);
for(int i=1; i<=q; ++i){
fin>>type>>a>>b;
if(type==0){
value=b;
poz=a;
update(1,1,n);
}
else{
fout<<query(1,1,n,a,b)<<"\n";
}
}
return 0;
}