Pagini recente » Cod sursa (job #2119148) | Cod sursa (job #2306092) | Cod sursa (job #55649) | Cod sursa (job #1817663) | Cod sursa (job #852974)
Cod sursa(job #852974)
// 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;
const int Nmax=15002;
ifstream f("datorii.in"); ofstream g("datorii.out");
int n, m;
ll b[Nmax], c[Nmax];
int main()
{ f>>n>>m;
for(int i = 1; i <= n; ++i)
{
f>>b[i]; b[i] += b[i-1];
c[i]=b[i]-b[i-zeros(i)];
}
int cod, ind, val, st, dr, 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
poz=0;
while(ind <= n)
{
c[ind] -= val;
ind += zeros(ind);
++poz;
}
}
}
g.close();
return 0;
}