Pagini recente » Cod sursa (job #3216830) | Cod sursa (job #2417217) | Cod sursa (job #1675791) | Cod sursa (job #1674166) | Cod sursa (job #3252309)
/*
__
/\ \
_ __ ___ ___\ \ \/'\ ___ __ ___ ___ __
/\`'__\/ __`\ /'___\ \ , < / __`\ /'__`\ /' _ `\ /' _ `\ /'__`\
\ \ \//\ \L\ \/\ \__/\ \ \\`\ /\ \L\ \/\ \L\.\_/\ \/\ \/\ \/\ \/\ \L\.\_
\ \_\\ \____/\ \____\\ \_\ \_\ \____/\ \__/.\_\ \_\ \_\ \_\ \_\ \__/.\_\
\/_/ \/___/ \/____/ \/_/\/_/\/___/ \/__/\/_/\/_/\/_/\/_/\/_/\/__/\/_/
*/
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
vector<int> sq, v;
int r, n, m;
void update(int val, int pos) {
pos--;
v[pos] -= val;
sq[pos / r] -= val;
}
int query(int s, int d) {
s--, d--;
int res = 0;
if (d / r == s / r) { // all in one
for (int i = s; i <= d; i++) {
res += v[i];
}
return res;
}
int f1 = s / r;
if (s != f1) {
f1++;
for (int i = s; i < r * f1; i++) {
res += v[i];
}
}
int f2 = d / r;
if (d != (f2 + 1) * r - 1) {
for (int i = f2 * r; i <= d; i++) {
res += v[i];
}
f2--;
}
for (int i = f1; i <= f2; i++) {
res += sq[i];
}
return res;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// #ifdef LOCAL
// ifstream cin{"input.txt"};
// ofstream cout{"output.txt"};
// #endif
ifstream cin{"datorii.in"};
ofstream cout{"datorii.out"};
cin >> n >> m;
v.assign(n, 0);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
r = ceil(sqrt(n));
sq.assign(r, 0);
int last = 1;
for (int i = 0; i < n; i++) {
if (i >= r * last) {
last++;
}
sq[last - 1] += v[i];
}
int c = 0;
int val, pos, s, d;
for (int q = 0; q < m; q++) {
cin >> c;
if (c == 0) { // update
cin >> pos >> val;
update(val, pos);
} else { // query
cin >> s >> d;
cout << query(s, d) << endl;
}
}
return 0;
}