Pagini recente » Cod sursa (job #2252136) | Cod sursa (job #2151535) | Cod sursa (job #8334) | Cod sursa (job #369681) | Cod sursa (job #2392896)
#include <iostream>
#include <cstdio>
#define N 100005
#define uint unsigned int
using namespace std;
int n,m,c,a,b;
uint aib[N];
void actualiazare(int val, int poz){
for(int i = poz; i <= n; i+=(i&(-i)))
aib[i]+=val;
}
uint suma(int poz){
uint ret = 0;
for(int i=poz;i>0;i-=(i&(-i)))
ret+=aib[i];
return ret;
}
int cautbin(int val){
int start, putere;
for(putere=1;putere<n;putere*=2);
for(start=0;putere && val; putere/=2)
if(start+putere<=n && aib[start+putere]<=val){
start+=putere;
val-=aib[start];
}
if(val)
return -1;
return start;
}
int main(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d", &n, &m);
for(int i=1;i<=n;++i){
scanf("%d", &a);
actualiazare(a,i);
}
for(int i=0;i<m;++i){
scanf("%d%d", &c,&a);
if(c<2){
scanf("%d",&b);
if(c==0)
actualiazare(b,a);
else
cout<<suma(b)-suma(a-1)<<"\n";
}
else
cout<<cautbin(a)<<"\n";
}
return 0;
}