Pagini recente » Cod sursa (job #1079837) | Cod sursa (job #2686633) | Cod sursa (job #365526) | Cod sursa (job #1092176) | Cod sursa (job #405592)
Cod sursa(job #405592)
# include <fstream>
using namespace std;
int n, m, v[100000], p, q, x, poz;
void update (int nod, int st, int dr)
{
if (st==dr)
{
v[nod]=x;
return;
}
int mij=(st+dr)/2;
if (poz<=mij)
update(2*nod, st, mij);
else
update(2*nod+1, mij+1, dr);
v[nod]=v[2*nod]+v[2*nod+1];
}
int caut (int nod, int st, int dr)
{
if (p<=st && dr<=q)
return v[nod];
int rez=0;
int mij=(st+dr)/2;
if (p<=mij)
rez+=caut(2*nod, st, mij);
if (mij<q)
rez+=caut(2*nod+1, mij+1, dr);
return rez;
}
void datorie (int nod, int st, int dr)
{
if (st==dr)
{
v[nod]-=x;
return;
}
int mij=(st+dr)/2;
if (poz<=mij)
datorie(2*nod, st, mij);
else
datorie (2*nod+1, mij+1, dr);
v[nod]=v[2*nod]+v[2*nod+1];
}
int main()
{
ifstream fin ("datorii.in");
freopen ("datorii.out", "w", stdout);
fin>>n>>m;
for (int i=1;i<=n;i++)
{
fin>>x;
poz=i;
update(1, 1, n);
}
int k;
for (;m;--m)
{
fin>>k>>p>>q;
if (k==0)
{
x=q;
poz=p;
datorie(1, 1, n);
}
else
{
int sol=caut(1,1,n);
printf("%d",sol);
printf("\n");
}
}
return 0;
}