Pagini recente » Cod sursa (job #813058) | Cod sursa (job #2502350)
#include <fstream>
#include <cctype>
#include <cstdio>
using namespace std;
FILE *fin = fopen("datorii.in", "r");
ofstream fout("datorii.out");
const int bsize = 1<<20;
char buff[bsize];
int poz = bsize;
inline char next()
{
if (poz == bsize)
{
fread(buff, 1, bsize, fin);
poz = 0;
}
return buff[poz++];
}
int nr()
{
int x = 0;
char c;
do
{
c = next();
} while (isdigit(c) == 0);
while (isdigit(c))
{
x = x * 10 + c-48;
c = next();
}
return x;
}
#define lsb(x) ( ( x^(x-1)) & x )
int n;
void update(int p, int val, int arb[])
{
while (p <= n)
{
arb[p] = arb[p] + val;
p = p + lsb(p);
}
}
int query(int st, int dr, int arb[])
{
int sdr, sst, p;
sdr = sst = 0;
p = st-1;
while (p > 0)
{
sst = sst + arb[p];
p = p - lsb(p);
}
p = dr;
while (p > 0)
{
sdr = sdr + arb[p];
p = p - lsb(p);
}
return sdr - sst;
}
int main()
{
int arb[15001] = {}, m, i, x, y, t, p;
n = nr();
m = nr();
for (i = 1; i<=n; i++)
{
x = nr();
update(i, x, arb);
}
for (i = 1; i<=m; i++)
{
t = nr();
x = nr();
y = nr();
if (t == 0)
update(x, -y, arb);
else
fout << query(x, y, arb) << '\n';
}
return 0;
}