Pagini recente » Cod sursa (job #1913303) | Cod sursa (job #913928) | Cod sursa (job #3169551) | Cod sursa (job #2520706) | Cod sursa (job #405081)
Cod sursa(job #405081)
# include <fstream>
using namespace std;
int n, m, v[100000], p, q, x, poz;
void arb (int nod, int st, int dr)
{
if (st==dr)
{
v[nod]=x;
return;
}
int mij=(st+dr)/2;
if (poz<=mij)arb(2*nod, st, mij);
else arb(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 achit (int nod, int st, int dr)
{
if (st==dr)
{
v[nod]-=x;
return;
}
int mij=(st+dr)/2;
if (poz<=mij)achit(2*nod, st, mij);
else achit (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;
arb(1, 1, n);
}
int k;
for (;m;--m)
{
fin>>k>>p>>q;
if (k==0)
{
x=q;
poz=p;
achit(1, 1, n);
}
else
printf("%d\n", caut(1, 1, n));
}
return 0;
}