Pagini recente » Cod sursa (job #3184374) | Cod sursa (job #2881233) | Cod sursa (job #837636) | Cod sursa (job #976253) | Cod sursa (job #1766781)
#include <iostream>
#include <cstdio>
using namespace std;
int aib[100000+5];
int n;
int query(int p){
int rez=0,pow2;
while(p!=0){
rez+=aib[p];
pow2=(p&(-p));
p-=pow2;
}
return rez;
}
int searchh(int val){
int i=0,pas=1<<16;
while(pas!=0){
if(i+pas<=n && aib[i+pas]<=val){
i+=pas;
val-=aib[i];
if(val==0)return i;
}
pas/=2;
}
return -1;
}
void update(int p,int val){
int pow2;
while(p<=n){
aib[p]+=val;
pow2=(p&(-p));
p+=pow2;
}
}
int main()
{
int k,b,a,r;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&b),update(i,b);
for(int i=1;i<=k;i++){
scanf("%d",&r);
if(r==0 || r==1)
scanf("%d %d",&a,&b);
else
scanf("%d",&a);
// printf("%d %d\n",a,b);
if(r==0){
update(a,b);
continue ;
}
if(r==1){
printf("%d\n",query(b)-query(a-1));
continue ;
}
printf("%d\n",searchh(a));
}
return 0;
}