Pagini recente » Cod sursa (job #1958405) | Cod sursa (job #929973) | Cod sursa (job #2664085) | Cod sursa (job #2097716) | Cod sursa (job #2784191)
#include <iostream>
#include <stdio.h>
using namespace std;
const int NMAX = 15000;
void update(int pos, int val, int n);
int query(int pos);
int aib[NMAX + 1];
int main()
{
int n, m, i, type, t, v, l, r;
FILE *fin = fopen("datorii.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (i = 1; i <= n; i++)
{
fscanf(fin, "%d", &v);
update(i, v, n);
}
FILE *fout = fopen("datorii.out", "w");
for (i = 0; i < m; i++)
{
fscanf(fin, "%d", &type);
if (type == 0)
{
fscanf(fin, "%d%d", &t, &v);
update(t, -v, n);
}
else
{
fscanf(fin, "%d%d", &l, &r);
fprintf(fout, "%d\n", query(r) - query(l - 1));
}
}
fclose(fout);
fclose(fin);
return 0;
}
void update(int pos, int val, int n)
{
aib[pos] += val;
while (n - pos >= (-pos & pos))
{
pos += (pos & -pos);
aib[pos] += val;
}
}
int query(int pos)
{
int s = 0;
while (pos)
{
s += aib[pos];
pos -= (pos & -pos);
}
return s;
}