Pagini recente » Cod sursa (job #2082907) | Cod sursa (job #2365073) | Cod sursa (job #592378) | Cod sursa (job #2523701) | Cod sursa (job #645754)
Cod sursa(job #645754)
#include <fstream>
using namespace std;
int val, poz,v[15001],inc,sf,maxim;
void update(int nod, int st, int dr)
{
if(st==dr)
{
v[nod]=val;
return;
}
int mijloc=(st+dr)/2;
if(poz<=mijloc)update(nod*2,st,mijloc);
else
update(nod*2+1,mijloc+1,dr);
v[nod]=v[nod*2]+v[nod*2+1];
}
void update1(int nod, int st, int dr)
{
if(st==dr)
{
v[nod]-=val;
return;
}
int mijloc=(st+dr)/2;
if(poz<=mijloc)update1(nod*2,st,mijloc);
else
update1(nod*2+1,mijloc+1,dr);
v[nod]=v[nod*2]+v[nod*2+1];
}
void answer(int nod, int st, int dr)
{
if(inc<=st && dr<=sf)
{
maxim+=v[nod];
return;
}
int mijloc=(st+dr)/2;
if(inc<=mijloc)
answer(nod*2,st,mijloc);
if(mijloc<sf)
answer(nod*2+1,mijloc+1,dr);
}
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, i,x;
fin>>n >>m;
for(i=1;i<=n;++i)
{
fin>>x;
poz=i;
val=x;
update(1,1,n);
}
int a, b, tip;
for(i=1;i<=m;++i)
{
fin>>tip >>a >>b;
if(tip==1)
{
maxim=0;
inc=a;
sf=b;
answer(1,1,n);
fout<<maxim<<'\n';
}
else
{
val=b;
poz=a;
update1(1,1,n);
}
}
return 0;
}