Pagini recente » Cod sursa (job #3001844) | Cod sursa (job #1792417) | Cod sursa (job #1333754) | Cod sursa (job #2278438) | Cod sursa (job #202404)
Cod sursa(job #202404)
#include <stdio.h>
#define N 100001
#define niv(x) (((x)^((x)-1))+1)/2
long mat[N];
long suma(long a)
{long S,j;
for(S=0,j=a;j>0;j-=niv(j))
{S+=mat[j];}
return S;
}
int main ()
{FILE *fin=fopen("aib.in","r");
FILE *fout=fopen("aib.out","w");
long m,n,a,b,i,j;
long st,dr,s,mij;
fscanf(fin,"%ld%ld",&n,&m);
for (i=1;i<=n;i++)
{fscanf(fin,"%ld",&mat[i]);}
for (i=1;i<=n;i++)
{for(a=niv(i),b=i-1;a/2;a=a>>1,b=b-niv(b))
{mat[i]+=mat[b];}
}
for (i=1;i<=m;i++)
{fscanf(fin,"%ld",&a);
switch(a)
{case 0:
fscanf(fin,"%ld%ld",&a,&b);
for(j=a;j<=n;j+=niv(j))
{mat[j]+=b;}
break;
case 1:
fscanf(fin,"%ld%ld",&a,&b);
fprintf(fout,"%ld\n",suma(b)-suma(a-1));
break;
case 2:
fscanf(fin,"%ld",&a);
for(st=1,dr=n;(s=suma(mij=((st+dr)/2)))!=a||suma(mij-1)==a;)
{(s<a)?(st=mij+1):(dr=mij-1);
}
fprintf(fout,"%ld\n",mij);
}
}
fclose(fout);
return 0;
}