Pagini recente » Cod sursa (job #241337) | Cod sursa (job #373349) | Cod sursa (job #2394098) | Cod sursa (job #2012978) | Cod sursa (job #245596)
Cod sursa(job #245596)
#include<stdio.h>
long int n,m,c[100001],k;
FILE *in=fopen("aib.in","r");
FILE *out=fopen("aib.out","w");
void adauga(long int poz,long int val)
{
long int i,nr;
while(poz<=n)
{
c[poz]=c[poz]+val;
i=poz;
nr=1;
while(!(i&1))
{
i=i>>1;
nr=nr<<1;
}
poz=poz+nr;
}
}
void citire()
{
fscanf(in,"%ld",&n);
fscanf(in,"%ld",&m);
for(i=1;i<=n;i++) c[i]=0;
long int i,a;
for(i=1;i<=n;i++)
{
fscanf(in,"%ld",&a);
adauga(i,a);
}
}
long int suma(int poz)
{
long int s,i,nr;
s=0;
while(poz>0)
{
s=s+c[poz];
i=poz;nr=1;
while(!(i&1))
{
i=i>>1;
nr=nr<<1;
}
poz=poz-nr;
}
return s;
}
long int elemente(long int val)
{
long int i,nr;
for(nr=1;nr<n;nr=nr<<1);
for(i=0;nr;nr=nr>>1)
{
if(val>=c[i+nr])
{
i=i+nr;
val=val-c[i];
if(val==0) return i;
}
}
return -1;
}
void solutie()
{
long int i,op,poz,val;
for(i=1;i<=m;i++)
{
fscanf(in,"%ld",&op);
if(op==0)
{
fscanf(in,"%ld",&poz);
fscanf(in,"%ld",&val);
adauga(poz,val);
}
if(op==1)
{
fscanf(in,"%ld",&poz);
fscanf(in,"%ld",&val);
fprintf(out,"%ld\n",suma(val)-suma(poz-1));
}
if(op==2)
{
fscanf(in,"%ld",&k);
fprintf(out,"%ld\n",elemente(k));
}
}
}
int main(void)
{
citire();
solutie();
return 1;
}