Pagini recente » Cod sursa (job #2946449) | Profil adesafta2002 | Cod sursa (job #2488498) | Cod sursa (job #1682337) | Cod sursa (job #2032849)
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
const int NMAX = 15000;
int aint[4 * NMAX + 5];
int n, m, x, a, b, q, ans, poz;
void update(int node, int st, int dr);
void query(int node, int st, int dr);
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> n >> m;
for(poz = 1; poz <= n; ++poz)
{
fin >> x;
update(1, 1, n);
}
for(int i = 1; i <= m; ++i)
{
fin >> q >> a >> b;
if(q == 0)
{
poz = a;
x = -b;
update(1, 1, n);
}
else
{
ans = 0;
poz = a, x = b;
query(1, 1, n);
fout << ans << ' ';
}
}
fin.close();
fout.close();
return 0;
}
void update(int node, int st, int dr)
{
if(st == dr)
{
aint[node] += x;
return;
}
int med = (st + dr) / 2;
if(poz <= med)
update(node * 2, st, med);
else
update(node * 2 + 1, med + 1, dr);
aint[node] = aint[node * 2] + aint[node * 2 + 1];
}
void query(int node, int st, int dr)
{
if(a <= st && dr <= b)
{
ans += aint[node];
return;
}
if(st == dr)
return;
int med = (st + dr) / 2;
if(a <= med)
query(node * 2, st, med);
if(b > med)
query(node * 2 + 1, med + 1, dr);
}