Pagini recente » Borderou de evaluare (job #3321123) | Cod sursa (job #3335645) | Cod sursa (job #3339170) | Cod sursa (job #3324434) | Cod sursa (job #3328694)
#include <fstream>
#include <math.h>
int main()
{
static int a[15001], batog[15001];
int n, m, i, k, nr, tip, x, y, t, v, b, p, q, sum, bp, bq, ep, sq;
std::ifstream fi("datorii.in");
std::ofstream fo("datorii.out");
fi >> n >> m;
for (i = 1; i <= n; i++) fi >> a[i];
k = sqrt(n);
nr = (n + k - 1) / k;
for (i = 1; i <= n; i++) batog[(i - 1) / k] += a[i];
while (m--)
{
fi >> tip >> x >> y;
if (tip == 0)
{
t = x;
v = y;
int b = (t - 1) / k;
a[t] -= v;
batog[b] -= v;
}
else
{
p = x;
q = y;
sum = 0;
bp = (p - 1) / k;
bq = (q - 1) / k;
if (bp == bq) for (i = p; i <= q; i++) sum += a[i];
else
{
ep = (bp + 1) * k;
for (i = p; i <= ep && i <= n; i++) sum += a[i];
for (b = bp + 1; b <= bq - 1; b++) sum += batog[b];
sq = bq * k + 1;
for (i = sq; i <= q; i++) sum += a[i];
}
fo << sum << '\n';
}
}
}