Pagini recente » Cod sursa (job #978782) | Cod sursa (job #443673) | Cod sursa (job #1518089) | Cod sursa (job #2907565) | Cod sursa (job #580212)
Cod sursa(job #580212)
#include <stdio.h>
FILE *f=fopen("aib.in","r"),*g=fopen("aib.out","w");
int i,n,ai[100001],m,a,b,j,x,k,p,sol=0,sum;
int main(void)
{
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&a);
for (j=i;j<=n;j+=(j^(j-1)&j))
ai[j]+=a;
}
for (i=1;i<=m;i++)
{
fscanf(f,"%d",&x);
if (x==2)
{
fscanf(f,"%d",&a);
k=1;
while (k<=n) k*=2;
k/=2;
p=0;
while (k>=1)
{
sum=0;
for (j=p+k;j>=1;j-=(j^(j-1)&j))
sum+=ai[j];
if (sum==a){sol=p+k; break;}
if (sum<a)p+=k;
k/=2;
}
if (sol==0) sol--;
fprintf(g,"%d\n",sol);
continue;
}
fscanf(f,"%d%d",&a,&b);
if (x==1)
{
sum=0;
for (j=b;j>=1;j-=(j^(j-1)&j))
sum+=ai[j];
for (j=a-1;j>=1;j-=(j^(j-1)&j))
sum-=ai[j];
fprintf(g,"%d\n",sum);
continue;
}
for (j=a;j<=n;j+=(j^(j-1)&j))
ai[j]+=b;
}
}