Pagini recente » Cod sursa (job #1310581) | Cod sursa (job #2094132) | Cod sursa (job #591064) | Cod sursa (job #1596433) | Cod sursa (job #173583)
Cod sursa(job #173583)
#include <cstdio>
const int nmax=100001;
int n,m,i,j,k,s[nmax];
void update(int poz,int val){
while (poz<=n){s[poz]+=val;
poz=(poz|(poz-1))+1;}
}
int query(int poz){
int sum=0;
while (poz>0) {sum+=s[poz];
poz&=(poz-1);}
return sum;
}
int search(int sum){
int p=0,x=1;
for (;x<n;x<<=1);
for (;x>0;x>>=1)
if (p+x<=n)
if (s[p+x]<=sum){
p+=x;
sum-=s[p];}
return (!sum?p:-1);
}
int main(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++) {scanf("%d",&j);
update(i,j);}
while (m--) {scanf("%d",&i);
if (i==2) {scanf("%d",&j);
printf("%d\n",search(j));}
else {scanf("%d %d",&j,&k);
if (i==0) update(j,k);
else printf("%d\n",query(k)-query(j-1));
}
}
return 0;
}