Pagini recente » Cod sursa (job #2239652) | Cod sursa (job #1121403) | Cod sursa (job #2529987) | Cod sursa (job #3242703) | Cod sursa (job #3001734)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int NMAX = 100005;
int v[4*NMAX];
int poz, val, start , finish;
void update(int nod, int st, int dr)
{
if(st == dr)
{
v[nod] += val;
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 afisare(int nod, int st, int dr)
{
if(start <= st && dr <= finish)
{
return v[nod];
}
int mij = (st + dr) / 2;
int s1 = 0, s2 = 0;
if(start <= mij)
s1 = afisare(2*nod, st, mij);
if(mij < finish)
s2 = afisare(2*nod + 1, mij + 1, dr);
return s1 + s2;
}
int main()
{
int n, m, x;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> x;
poz = i;
val = x;
update(1,1,n);
}
for(int i = 1; i <= m; i++)
{
fin >> x >> start >> finish;
if(x == 0)
{
poz = start;
val = -finish;
update(1, 1, n);
}
else
if(x == 1)
{
fout << afisare(1, 1, n) << "\n";
}
}
return 0;
}