Pagini recente » Cod sursa (job #1446629) | Cod sursa (job #511512) | Cod sursa (job #521645) | Istoria paginii runda/contest1234 | Cod sursa (job #261748)
Cod sursa(job #261748)
// 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,FILE *f1)
{
int i,k,i2,j;
f[0]=0;
for(i=1;i<=n;i++)
{
fscanf(f1,"%d",&e[i]);
if(i%2==0)
{
i2=i;
k=1;
while(i2%2==0)
{
i2=i2>>1;
k=k<<1;
}
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);
schimbare(n,f1);
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>>1;
k=k<<1;
}
sumas=f[a]+sumas;
a=a-k;
}
while(b>0)
{
b2=b;
k=1;
while(b2%2==0)
{
b2=b2>>1;
k=k<<1;
}
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>>1;
k=k<<1;
}
a=a+k;
}
}
}
fclose(f1);
fclose(f2);
return 0;
}