Pagini recente » Cod sursa (job #1720953) | Cod sursa (job #763217)
Cod sursa(job #763217)
#include <iostream>
#include <fstream>
using namespace std;
int n, m, aib[15005];
void add(int poz, int val) {
int i=poz;
while(i<=n) {
aib[i]+=val;
i+= (i & -i);
}
}
void rmv(int poz, int val) {
int i=poz;
while(i<=n) {
aib[i]-=val;
i+= (i & -i);
}
}
int compute(int poz) {
int rez=0, i;
i=poz;
while(i>0) {
rez+=aib[i];
i -= (i & -i);
}
return rez;
}
int main() {
ifstream f("datorii.in");
ofstream g("datorii.out");
int i, j, op, a, b;
f>>n>>m;
for(i=1; i<=n; i++) aib[i]=0;
for(i=1; i<=n; i++) {
f>>j;
add(i, j); //pe poz. i se pune valoarea j
}
for(int t = 1; t<=m; t++) {
f>>op>>a>>b;
if(op==0) { //s-a achitat plata -> trebuie scazut din arbore
rmv(a,b);
}
else {
g<<compute(b)-compute(a-1)<<"\n";
}
}
f.close();
g.close();
return 0;
}