Pagini recente » Monitorul de evaluare | Cod sursa (job #3301309) | Borderou de evaluare (job #1904998) | Borderou de evaluare (job #481080) | Cod sursa (job #3328656)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int l = (int)sqrt(n) + 1;
int nrbl = (n + l - 1) / l;
long long a[15001];
long long pr[15001];
long long batog[200];
for (int i = 1; i <= n; i++) {
cin >> a[i];
pr[i] = a[i];
}
for (int i = 0; i < nrbl; i++)
batog[i] = 0;
for (int i = 1; i <= n; i++)
batog[(i - 1) / l] += pr[i];
while (m--) {
int cod;
cin >> cod;
if (cod == 0) {
int t, v;
cin >> t >> v;
pr[t] -= v;
batog[(t - 1) / l] -= v;
}
else {
int p, q;
cin >> p >> q;
long long rez = 0;
int k = (p - 1) / l;
for (int i = p; i <= min(q, k * l + l); i++)
rez += pr[i];
for (int b = k + 1; b < (q - 1) / l; b++)
rez += batog[b];
int start = ((q - 1) / l) * l + 1;
for (int i = start; i <= q; i++)
rez += pr[i];
cout << rez << "\n";
}
}
return 0;
}