Pagini recente » Cod sursa (job #2374778) | Cod sursa (job #2814692) | Cod sursa (job #2910785) | Cod sursa (job #114304) | Cod sursa (job #852939)
Cod sursa(job #852939)
// arbore indexat binar
#include<fstream>
#define ll long long
using namespace std;
const int Nmax=15002;
ifstream f("datorii.in"); ofstream g("datorii.out");
int n, m;
int mk[17];
ll b[Nmax], c[Nmax];
inline int valk(int a)
{
int v=0,p=1;
while((a & mk[v]) == 0) v++, p <<= 1;
return p;
}
int main()
{ f>>n>>m;
int nr=0, x=n;
while(x) mk[nr]=(1<<nr), nr++, x >>= 1;
for(int i = 1; i <= n; ++i)
{
f>>b[i]; b[i] += b[i-1];
c[i]=b[i]-b[i-valk(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];
while( (dr & mk[poz]) == 0) ++poz;
dr -= mk[poz];
++poz;
}
--st;
ll s2=0; poz=0;
while(st)
{
s2 += c[st];
while( (st & mk[poz]) == 0) ++poz;
st -= mk[poz];
++poz;
}
g<<s1-s2<<'\n';
}
else
{
f>>ind>>val; // modificare
poz=0;
while(ind <= n)
{
c[ind] -= val;
while((ind & mk[poz]) == 0) ++poz;
ind += mk[poz];
++poz;
}
}
}
g.close();
return 0;
}