Pagini recente » Cod sursa (job #341152) | Cod sursa (job #2356170) | Cod sursa (job #1990033) | Cod sursa (job #647839) | Cod sursa (job #427613)
Cod sursa(job #427613)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
void open(){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
}
int n,m,a,type,b,tree[100010],ans;
void update(int a,int b){
for (int i=a;i<=n;i+=(i & -i)){
tree[i]+=b;
}
}
int query(int a){
int sum=0;
for (int i=a;i>0;i-=(i & -i)){
sum+=tree[i];
}
return sum;
}
int main(){
open();
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%d",&b);
update(i,b);
}
for (int i=0;i<m;i++){
scanf("%d",&type);
if (type==0){
scanf("%d%d",&a,&b);
update(a,b);
}
else if (type==1){
scanf("%d%d",&a,&b);
printf("%d\n",query(b)-query(a-1));
}
else {
scanf("%d",&b);
int lo=1,hi=n;
while (1){
int mid=(lo+hi)>>1;
if (query(mid)<=b){
ans=mid;
lo=mid+1;
}
else hi=mid-1;
if (lo>hi) break;
}
printf("%d\n",ans);
}
}
//system("pause");
return 0;
}