Pagini recente » Cod sursa (job #557847) | Monitorul de evaluare | Cod sursa (job #1239692) | Cod sursa (job #2138930) | Cod sursa (job #1628935)
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,s,i,val,poz,x,y,semn,a[150000001];
void interogare(int nod, int st, int dr)
{int mij; if ( x <= st && dr <= y ) {
s=s+a[nod];
}
else
{mij = (st + dr) / 2;
if (x<= mij )
interogare (2 * nod, st, mij);
if ( mij < y )
interogare (2 * nod + 1, mij + 1, dr);
}
}
void achitare(int nod, int st, int dr, int sgn)
{int mij;
if ( st == dr )
a[nod] += val * sgn;
else
{mij = (st + dr) / 2;
if ( poz <= mij )
achitare(2 * nod, st, mij, sgn);
else
achitare (2 * nod + 1, mij + 1, dr, sgn);
a[nod] = a[2 * nod] + a[2 * nod + 1];
}}
int main()
{f>>n>>m;
for(i=1;i<=n;++i)
{f>>val;
poz=i;
achitare(1,1,n,1);
}
for(i=1;i<=m;++i)
{f>>semn>>x>>y;
if(semn==0)
{ val=y;
poz=x;
achitare(1,1,n,-1);
}
else
{s=0;
interogare(1,1,n);
g<<s<<'\n';
}
}
return 0;
}