Pagini recente » Cod sursa (job #2723288) | Cod sursa (job #2756398) | Cod sursa (job #2034031) | Cod sursa (job #2560311) | Cod sursa (job #1264266)
#include <stdio.h>
int aib[100001],n;
int querry (int ind)
{
int s;
s=0;
for(;ind!=0;ind=ind-((ind&(ind-1))^ind))
s=s+aib[ind];
return s;
}
void update (int ind,int nr)
{
for (;ind<=n;ind=ind+((ind&(ind-1))^ind))
aib[ind]=aib[ind]+nr;
}
int cautare(int nr)
{
int i,ind;
for (ind=1;ind<n;ind=ind<<1);
for (i=0;ind!=0;ind=ind/2)
{
if (i+ind<=n)
{
if(nr>=aib[i+ind])
{
i=i+ind;
nr=nr-aib[i];
if (nr==0)
return i;
}
}
}
return -1;
}
int main()
{
FILE *f1,*f2;
int m,i,a,b,stg;
f1=fopen("aib.in","r");
f2=fopen("aib.out","w");
fscanf(f1,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f1,"%d",&a);
update(i,a);
}
for (i=0;i<m;i++)
{
fscanf(f1,"%d",&stg);
if (stg<2)
{
fscanf(f1,"%d%d",&a,&b);
if (stg==0)
update(a,b);
else
fprintf(f2,"%d\n",querry(b)-querry(a-1));
}
else
{
fscanf(f1,"%d",&a);
fprintf(f2,"%d\n",cautare(a));
}
}
fclose(f1);
fclose(f2);
return 0;
}