Pagini recente » Cod sursa (job #937395) | Cod sursa (job #3263524) | Cod sursa (job #2742529) | Cod sursa (job #96388) | Cod sursa (job #798354)
Cod sursa(job #798354)
#include <fstream>
using namespace std;
int arbint[80000];
int u_pos, u_val;
int q_st, q_dr, q_result;
void query(int nod, int st, int dr) {
if(q_st <= st && dr <= q_dr) {
q_result += arbint[nod];
return;
}
int mij = (st + dr) / 2;
if(q_st <= mij) query(nod*2, st, mij);
if(mij < q_dr) query(nod*2 + 1, mij+1, dr);
}
void update(int nod, int st, int dr) {
if(st == dr) {
arbint[nod] += u_val;
return;
}
int mij = (st + dr) / 2;
if(u_pos <= mij) update(nod*2, st, mij);
else update(nod*2 + 1, mij+1, dr);
arbint[nod] = arbint[nod*2] + arbint[nod*2 + 1];
}
int main(void) {
int n, m;
ifstream fin("datorii.in");
fin >> n >> m;
for(int i = 1; i <= n; ++i) {
int nr; fin >> nr;
u_pos = i, u_val = nr;
update(1, 1, n);
}
ofstream fout("datorii.out");
for(int i = 0; i < m; ++i) {
int op, a, b;
fin >> op >> a >> b;
if(op == 0) {
u_val = -b, u_pos = a;
update(1, 1, n);
}
else {
q_st = a, q_dr = b, q_result = 0;
query(1, 1, n);
fout << q_result << '\n';
}
}
fin.close(); fout.close();
}