Pagini recente » Cod sursa (job #3123280) | Cod sursa (job #1897955) | Cod sursa (job #1684677) | Cod sursa (job #1777203) | Cod sursa (job #24401)
Cod sursa(job #24401)
#include<fstream.h>
#include<math.h>
#include<stdio.h>
#define glb 15001
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
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;
fscanf(f,"%d%d",&m,&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&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-(int)pow(2,z[i])+1,i);
}
double sump(int poz)
{
double s=0;
for(int i=poz;i>=0;)
{
s+=c[i];
i=i-(int)pow(2,z[i]);
}
return s;
}
void procesare()
{
int i,j;
int op,v1,v2;
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&op,&v1,&v2);
if(op==0)
{
for(j=v1;j<=n;)
{
c[j]-=v2;
j=j+(int)pow(2,z[j]);
}
}
else
{
double descr=sump(v2)-sump(v1-1);
fprintf(g,"%f %c",descr,13);
}
}
}
int main(void)
{
citire();
init();
procesare();
fclose(g);
return 0;
}