Pagini recente » Cod sursa (job #3177805) | Cod sursa (job #1706380) | Cod sursa (job #2386882) | Cod sursa (job #220506) | Cod sursa (job #2696132)
#include <bits/stdc++.h>
using namespace std;
int n, m, sumArb[60005], x, y, task, pos;
int start, stop, val;
ifstream f("datorii.in");
ofstream g("datorii.out");
void build(int nod, int left, int right)
{
if(left == right)
{
sumArb[nod] = val;
return;
}
int mid = (right + left) / 2;
if(pos <= mid)
build(2 * nod, left, mid);
else
build(2 * nod + 1, mid + 1, right);
sumArb[nod] = sumArb[2 * nod] + sumArb[2 * nod + 1];
}
void Update(int nod, int left, int right)
{
if(left == right)
{
sumArb[nod] -= val;
return;
}
int mid = (left + right) / 2;
if(pos <= mid)
Update(2 * nod, left, mid);
else
Update(2 * nod + 1, mid + 1, right);
sumArb[nod] = sumArb[2 * nod] + sumArb[2 * nod + 1];
}
int Querry(int nod, int left, int right)
{
if(start <= left && stop >= right)
return sumArb[nod];
int mid = (left + right) / 2;
int sum = 0;
if(start <= mid)
sum += Querry(2 * nod, left, mid);
if(stop > mid)
sum += Querry(2 * nod + 1, mid + 1, right);
return sum;
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
{
f >> val;
pos = i;
build(1, 1, n);
}
for(int i = 1; i <= m; i++)
{
f >> task >> x >> y;
if(task == 0)
{
pos = x;
val = y;
Update(1, 1, n);
}
else
{
start = x;
stop = y;
g << Querry(1, 1, n) << "\n";
}
}
return 0;
}