Pagini recente » Cod sursa (job #220484) | Cod sursa (job #2518694) | Cod sursa (job #867011) | Cod sursa (job #3193351) | Cod sursa (job #853972)
Cod sursa(job #853972)
// 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;
}