Pagini recente » Cod sursa (job #701771) | Cod sursa (job #2261500) | Cod sursa (job #414456) | Cod sursa (job #2699808) | Cod sursa (job #1425395)
#include <stdio.h>
#include <stdlib.h>
int aib[100001],n;
void upd(int pl,int i){
while(i<=n){
aib[i]+=pl;
i+=i&(i-1)^i;
}
}
int sum(int a){
int s=0;
while(a>0){
s+=aib[a];
a=a-(a&(a-1))^a;
}
return s;
}
int caut(int s){
int p,i;
for(p=1;p<n;p*=2);
for(i=0;p>0;p/=2)
if(i+p<=n && sum(i+p)<=s)
i+=p;
return i;
}
int main()
{
FILE*fin,*fout;
int k,i,m,c,a,b,x;
fin=fopen("aib.in","r");
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&x);
upd(x,i);
}
fout=fopen("aib.out","w");
for(i=0;i<m;i++){
fscanf(fin,"%d",&c);
if(c==2){
fscanf(fin,"%d",&a);
if(sum(caut(a))==a)
fprintf(fout,"%d\n",caut(a));
else
fprintf(fout,"-1\n");
}
if(c==0){
fscanf(fin,"%d%d",&a,&b);
upd(b,a);
}
if(c==1){
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,"%d\n",sum(b)-sum(a-1));
}
}
fclose(fin);
fclose(fout);
return 0;
}