Pagini recente » Cod sursa (job #1487028) | Cod sursa (job #369360) | Cod sursa (job #163833) | Cod sursa (job #422385) | Cod sursa (job #199903)
Cod sursa(job #199903)
#include<iostream.h>
#include<math.h>
//# define DIM=15001
long v[4000], c[4000], rez[4000], i, j, bin, aux, k, n, m, s, suma1, suma2, f, l, modif, poz, val, t;
long nrzero(long i)
{ bin=0;
aux=i;
if(i%2==0)
while(aux%2==0)
{
bin++;
aux=aux/2;
}
else
bin=0;
return bin;
}
void make(long i)
{
bin=nrzero(i);
k=pow(2, bin);
for(j=i-k+1;j<=i;j++)
c[i]=c[i]+v[j];
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
cin>>n>>m;
for(i=1;i<=m;i++)
cin>>v[i];
for(i=1;i<=m;i++)
make(i);
for(l=1;l<=n;l++)
{ cin>>modif>>poz>>val;
suma1=suma2=0;
if(modif==0)
{ // se modifica valoarea achitata in ziua poz, dar si in zilele care contin pe poz,din vect c
t=poz;
c[t]=c[t]+val;
poz=poz+pow(2, nrzero(poz));
while(poz<=m)
{
c[poz]=c[poz]+val;
poz=poz+pow(2, nrzero(poz));
}
}
else
{
// calculam suma achitata in intervalul <poz, val>
// <1, poz-1>
t=poz-1;
while(t>0)
{
suma1=suma1+c[t];
t=t-pow(2, nrzero(t));
}
//<1, val>
t=val;
while(t>0)
{ suma2=suma2+c[t];
t=t-pow(2, nrzero(t));
}
rez[++f]=suma2-suma1;
}
}
for(i=1;i<=f;i++)
cout<<rez[i]<<endl;
return 0;
}