Pagini recente » Cod sursa (job #1582758) | Cod sursa (job #2350757) | Cod sursa (job #442398) | Cod sursa (job #1407573) | Cod sursa (job #173548)
Cod sursa(job #173548)
#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 ls=1,ld=n,mij,aux;
while (ls<=ld){
mij=(ls+ld)/2;
aux=query(mij);
if (aux==sum) return mij;
if (aux>sum) ld=mij-1;
else ls=mij+1;
}
return -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;
}