Pagini recente » Cod sursa (job #2020007) | Diferente pentru home intre reviziile 459 si 458 | Cod sursa (job #1766846) | Cod sursa (job #1533048) | Cod sursa (job #261736)
Cod sursa(job #261736)
// datorii.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <stdlib.h>
int e[15004];
int f[15004];
void schimbare(int n)
{
int i,k,i2,j;
f[0]=0;//1 3 2 0 0 10
for(i=1;i<=n;i++)
{
if(i%2==0)
{
i2=i;
k=1;
while(i2%2==0)
{
i2=i2/2;
k=k*2;
}
for(j=i-k+1;j<=i;j++)
f[i]=f[i]+e[j];
}
else
f[i]=e[i];
}
}
int main()
{
int i,n,m,iden,b,suma,j,a,a2,k,b2,sumad,sumas;
FILE *f1,*f2;
f1=fopen("datorii.in","r");
f2=fopen("datorii.out","w");
fscanf(f1,"%d %d",&n,&m);
for(i=1;i<=n;i++)
fscanf(f1,"%d",&e[i]);
schimbare(n);
for(i=1;i<=m;i++)
{
fscanf(f1,"%d ",&iden);
if(iden==1)
{
fscanf(f1,"%d %d",&a,&b);
sumad=0;
sumas=0;
a--;
while(a>0)
{
a2=a;
k=1;
while(a2%2==0)
{
a2=a2/2;
k=k*2;
}
sumas=f[a]+sumas;
a=a-k;
}
while(b>0)
{
b2=b;
k=1;
while(b2%2==0)
{
b2=b2/2;
k=k*2;
}
sumad=f[b]+sumad;
b=b-k;
}
suma=sumad-sumas;
fprintf(f2,"%d\n",suma);
}
else
{
fscanf(f1,"%d %d",&a,&b);
while(a<=n)
{
f[a]=f[a]-b;
a2=a;
k=1;
while(a2%2==0)
{
a2=a2/2;
k=k*2;
}
a=a+k;
}
}
}
fclose(f1);
fclose(f2);
return 0;
}