Pagini recente » Cod sursa (job #1998398) | Cod sursa (job #3217468) | Cod sursa (job #1844806) | Cod sursa (job #22472) | Cod sursa (job #2230249)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen ("datorii.in", "r"), *fout = fopen ("datorii.out", "w");
const int SIZE = 1 << 10;
int pointer = SIZE;
char buffer[SIZE];
inline char advance() {
if (pointer == SIZE) {
fread(buffer, 1, SIZE, fin);
pointer = 0;
}
return buffer[pointer++];
}
inline int read() {
int answer = 0, sign = 1;
char ch = advance();
while (!isdigit(ch) && ch != '-')
ch = advance();
if (ch == '-') {
sign *= -1;
ch = advance();
}
while (isdigit(ch)) {
answer = answer * 10 + ch - '0';
ch = advance();
}
return answer * sign;
}
const int MAXN = 15000;
int seg[4 * MAXN + 1], a[MAXN + 1], s[MAXN + 1];
int v, t, p, q;
void update (int st, int dr, int pos) {
if (st == dr) {
seg[pos] = seg[pos] + v;
}
else {
int mij = (st + dr) / 2;
if (t <= mij) {
update (st, mij, 2 * pos);
}
else {
update (mij + 1, dr, 2 * pos + 1);
}
seg[pos] = seg[2 * pos] + seg[2 * pos + 1];
}
}
int rmq (int st, int dr, int pos) {
if (p <= st && dr <= q) {
return seg[pos];
}
else {
if (p > dr || q < st)
return 0;
else {
int mij = (st + dr) / 2;
return rmq (st, mij, 2 * pos) + rmq (mij + 1, dr, 2 * pos + 1);
}
}
}
int main() {
int n, m, tip, i;
n = read ();
m = read ();
for (i = 1; i <= n; i++) {
a[i] = read ();
s[i] = s[i - 1] + a[i];
}
for (i = 1; i <= m; i++) {
tip = read ();
if (tip == 0) {
t = read ();
v = read ();
update (1, n, 1);
}
else {
p = read ();
q = read ();
fprintf (fout, "%d\n", (s[q] - s[p - 1]) - rmq (1, n, 1));
}
}
fclose (fin);
fclose (fout);
return 0;
}