Pagini recente » Cod sursa (job #21464) | Cod sursa (job #1739019) | Cod sursa (job #1269081) | Cod sursa (job #2639087) | Cod sursa (job #2752497)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int aint[60004];
int n,m;
int tst, tdr;
void update(int index, int st, int dr, int target, int val)
{
aint[index]+=val;
if(st<dr)
{
int mid = (st+dr)/2;
if(target<=mid)
update(index<<1, st, mid, target, val);
else
update((index<<1)+1, mid+1, dr, target, val);
}
}
int query(int index, int st, int dr)
{
if(tst<=st && dr<=tdr)
return aint[index];
int mid = (st+dr)/2;
if(tst<=mid && tdr>mid)
return query(index<<1, st, mid) + query((index<<1)+1, mid+1, dr);
if(tdr<=mid && tdr>=st)
return query(index<<1, st, mid);
if(tst>mid && tst<=dr)
return query((index<<1)+1, mid+1, dr);
return 0;
}
int main()
{
int i, op;
f>>n>>m;
for(i=1;i<=n;++i)
{
f>>tst;
update(1, 1, n, i, tst);
}
for(i=1;i<=m;++i)
{
f>>op>>tst>>tdr;
if(op==0)
update(1,1,n, tst, -tdr);
else
g<<query(1, 1,n)<<'\n';
}
return 0;
}