Pagini recente » Cod sursa (job #3256614) | Cod sursa (job #781363) | Cod sursa (job #1452495) | Cod sursa (job #527428) | Cod sursa (job #1773037)
#include <cstdio>
using namespace std;
int aib[100005],n;
void update(int poz,int val)
{
for( ; poz<=n; poz+=poz&-poz)
aib[poz]+=val;
}
int query(int poz)
{
int s=0;
for( ; poz; poz-=poz&-poz)
s=s+aib[poz];
return s;
}
int bs(int val)
{
int i=0;
int pas=1<<15;
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;
}
int main()
{ freopen("aib.in", "r",stdin);
freopen("aib.out", "w",stdout);
int m,i,op,a,b,val;
scanf("%d%d", &n, &m);
for(i=1;i<=n; i++){
scanf("%d", &val);
update(i, val);
}
for(i=1; i<=m; i++){
scanf("%d", &op);
if(op==0){
scanf("%d%d", &a, &b);
update(a, b);
}
else{
if(op==1){
scanf("%d%d", &a, &b);
printf("%d\n", query(b)-query(a-1));
}
else{
scanf("%d", &a);
printf("%d\n", bs(a));
}
}
}
return 0;
}