Pagini recente » Cod sursa (job #1195587) | Cod sursa (job #1829936) | Cod sursa (job #1063162) | Teoria jocurilor: numerele Sprague Grundy | Cod sursa (job #855595)
Cod sursa(job #855595)
// arbore indexat binar
#include<fstream>
#define ll long long
#define zeros(x) ( (x ^ (x - 1)) & x ) //doi la puterea numarul de zero-uri terminale din reprezentarea binara a lui x
using namespace std;
ifstream f("datorii.in"); ofstream g("datorii.out");
int n, m;ll c[15002];
int main(){
f>>n>>m;
int cod, ind, val, st, dr, poz;
for(int i = 1; i <= n; ++i) {
f>>val; ind=i; // modificare prin adunare
poz=0;
while(ind <= n){
c[ind] += val;
ind += zeros(ind);++poz;
}
}
while(m--){
f>>cod;
if(cod){
f>>st>>dr; // interogare;
ll s1=0; poz=0;
while(dr){
s1 += c[dr];
dr -= zeros(dr);
++poz;
}
--st;
ll s2=0; poz=0;
while(st){
s2 += c[st];
st -= zeros(st);
++poz;
}
g<<s1-s2<<'\n';
}
else {
f>>ind>>val; // modificare prin scadere
poz=0;
while(ind <= n){
c[ind] -= val;
ind += zeros(ind);
++poz;
}
}
}
g.close();
return 0;
}