Pagini recente » Cod sursa (job #1331596) | Cod sursa (job #2751813) | Cod sursa (job #3165012) | Cod sursa (job #1719322) | Cod sursa (job #2508792)
#include <iostream>
#include <fstream>
using namespace std;
ifstream x("datorii.in");
ofstream y("datorii.out");
int n,m,i,nr,start,finish,val,pos,h[15002*4+200],sol,num;
void update(int nod, int st, int dr)
{
if(st==dr)
{
h[nod]+=nr;
return;
}
else
{
int mij=(st+dr)/2;
if(pos<=mij)
update(nod*2,st,mij);
else
update(nod*2+1,mij+1,dr);
h[nod]=h[nod*2]+h[nod*2+1];
}
}
void query(int nod, int st, int dr)
{
if(st==dr)
{
sol+=h[nod];
num++;
if(num==finish-start+1)
return;
}
else
{
int mij=(st+dr)/2;
if(start<=mij)
query(nod*2,st,mij);
if(mij<=finish)
query(nod*2+1,mij+1,dr);
}
}
int main()
{
x>>n>>m;
for(i=1;i<=n;i++)
{
x>>nr;
pos=i;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
int nr1,nr2;
x>>nr;
x>>nr1>>nr2;
if(nr==0)
{
pos=nr1;
nr=-1*nr2;
update(1,1,n);
}
else
{
sol=0;
num=0;
start=nr1;
finish=nr2;
query(1,1,n);
y<<sol<<'\n';
}
}
x.close();
y.close();
return 0;
}