Pagini recente » Cod sursa (job #2369612) | Cod sursa (job #1010973) | Cod sursa (job #187992) | Cod sursa (job #2954688) | Cod sursa (job #935815)
Cod sursa(job #935815)
#include <fstream>
#define MAX_SIZE (1 << 15) + 9
using namespace std;
ifstream f("datorii.in"); ofstream g("datorii.out");
int n, m, poz, val, a, b, t, suma, MaxArb[MAX_SIZE];
int start, finish;
void update(int, int, int);
void query(int, int, int);
int main() {
f >> n >> m;
for(int i = 1; i <= n; ++i) {
f >> val;
poz = i;
update(1, 1, n);
}
for(int i = 1; i <= m; ++i) {
f >> t >> a >> b;
if(t) {
suma = 0;
start = a, finish = b;
query(1, 1, n);
g << suma << '\n';
}
else {
poz = a, val = -b;
update(1, 1, n);
}
}
}
void update(int nod, int st, int dr) {
if(st == dr) {
MaxArb[nod] += val;
return;
}
int m = (st + dr) >> 1;
if(poz <= m) update(2 * nod, st, m);
else update(2 * nod + 1, m + 1, dr);
MaxArb[nod] = MaxArb[2 * nod] + MaxArb[2 * nod + 1];
}
void query(int nod, int st, int dr) {
if(start <= st && dr <= finish) {
suma += MaxArb[nod];
return;
}
int m = (st + dr) >> 1;
if(start <= m) query(2 * nod, st, m);
if(finish > m) query(2 * nod + 1, m + 1, dr);
}