Pagini recente » Cod sursa (job #1836780) | Cod sursa (job #1626513) | Cod sursa (job #2251189) | Cod sursa (job #2637444) | Cod sursa (job #1424916)
#include <fstream>
#include <cassert>
#include <algorithm>
using namespace std;
#define MAXN 15001
int T[4 * MAXN + 10], N, M, Val, Pos, sum, a, b;
string file = "datorii";
fstream fin(file + ".in", ios::in);
fstream fout(file + ".out", ios::out);
void update(int node, int left, int right)
{
if (left == right){
T[node] += Val;
return;
}
int mid = (left + right) / 2;
if (Pos <= mid) update(node * 2, left, mid);
else update(node * 2 + 1, mid + 1, right);
T[node] = T[node * 2] + T[node * 2 + 1];
}
void query(int node, int left, int right)
{
if (a <= left && b >= right){
sum += T[node];
return;
}
int mid = (left + right) / 2;
if (a <= mid) query(node * 2, left, mid);
if (b >= mid + 1) query(node * 2 + 1, mid + 1, right);
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
fin >> Val, Pos = i,
update(1, 1, N);
for (int i = 1, x; i <= M; i++, sum = 0){
fin >> x >> a >> b;
if (!x) Val = -b, Pos = a,
update(1, 1, N);
else query(1, 1, N),
fout << sum << "\n";
}
fout.close();
fin.close();
return 0;
}