Pagini recente » Cod sursa (job #428291) | simulareoji1 | Cod sursa (job #498452) | Borderou de evaluare (job #1514892) | Cod sursa (job #3144365)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, q, i, a[60002], v[15002], poz, val, qx, qy, op;
static inline void setUp(int nod, int st, int dr) {
if(st == dr) a[nod] = v[st];
else {
int mij = (st + dr) / 2;
setUp(nod * 2, st, mij);
setUp(nod * 2 + 1, mij + 1, dr);
a[nod] = a[nod * 2] + a[nod * 2 + 1];
}
}
static inline void update(int nod, int st, int dr) {
if(st == dr) a[nod] -= val;
else {
int mij = (st + dr) / 2;
if(poz <= mij) update(nod * 2, st, mij);
else update(nod * 2 + 1, mij + 1, dr);
a[nod] = a[nod * 2] + a[nod * 2 + 1];
}
}
static inline int query(int nod, int st, int dr) {
if(qx <= st && dr <= qy) return a[nod];
else {
int mij = (st + dr) / 2;
if(qy <= mij) return query(nod * 2, st, mij);
if(mij + 1 <= qx) return query(nod * 2 + 1, mij + 1, dr);
return query(nod * 2, st, mij) +
query(nod * 2 + 1, mij + 1, dr);
}
}
int main() {
fin >> n >> q;
for(i = 1; i <= n; i++) fin >> v[i];
setUp(1, 1, n);
while(q--) {
fin >> op;
if(op == 1) {
fin >> qx >> qy;
fout << query(1, 1, n) << "\n";
}
else {
fin >> poz >> val;
update(1, 1, n);
}
}
return 0;
}