Pagini recente » Cod sursa (job #1929405) | Cod sursa (job #74164) | Cod sursa (job #1089057) | Cod sursa (job #2259252) | Cod sursa (job #24377)
Cod sursa(job #24377)
#include<conio.h>
#include<fstream.h>
#include<math.h>
#define glb 15001
ifstream f("datorii.in");
ofstream g("datorii.out");
int m,n,v[glb],z[glb];
double c[glb];
double suma(int x,int y)
{
double s=0;
for(int i=x;i<=y;i++)
s+=(double)v[i];
return s;
}
int nr_0(int nr)
{
int zerouri=0;
while(nr%2==0)
{
nr/=2;
zerouri++;
}
return zerouri;
}
void citire()
{
int i;
f>>n>>m;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
z[i]=nr_0(i);
}
void init()
{
for(int i=1;i<=n;i++)
c[i]=(double)suma(i-pow(2,z[i])+1,i);
}
double sump(int poz)
{
double s=0;
for(double i=poz;i>=0;)
{
s+=c[i];
i=i-pow(2,z[i]);
}
return s;
}
void procesare()
{
double i,j;
int op,v1,v2;
for(i=1;i<=m;i++)
{
f>>op>>v1>>v2;
if(op==0)
{
for(j=v1;j<=n;)
{
c[j]-=v2;
j=j+pow(2,z[j]);
}
}
else
{
g<<sump(v2)-sump(v1-1)<<"\n";
}
}
}
int main(void)
{
citire();
init();
procesare();
g.close();
f.close();
return 0;
}