Pagini recente » Cod sursa (job #1455747) | Cod sursa (job #1273334) | Cod sursa (job #2932569) | Cod sursa (job #2351834) | Cod sursa (job #1944234)
#include <iostream>
#include <fstream>
#define zeros(x) ((-x)&(x))
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,m;
int AIB[100005];
void add(int x, int val){
for(int i=x;i<=n;i+=zeros(i)){
AIB[i]+=val;
}
}
int sum(int x){
int s=0;
for(int i=x;i>=1;i-=zeros(i)){
s+=AIB[i];
}
return s;
}
int sum_interval(int x, int y){
return sum(y)-sum(x-1);
}
int binary_s(int x){
int st=1,dr=n,mid,sol=-1;
while(st<=dr){
mid=(st+dr)/2;
if(sum(mid)>=x){
sol=mid;
dr=mid-1;
}
else st=mid+1;
}
return sol;
}
void read(){
int x;
in>>n>>m;
for(int i=1;i<=n;i++){
in>>x;
add(i,x);
}
}
void solve(){
int op,x,y;
for(int i=1;i<=m;i++){
in>>op;
if(op==0){
in>>x>>y;
add(x,y);
}
else if(op==1){
in>>x>>y;
out<<sum_interval(x,y)<<"\n";
}
else if(op==2){
in>>x;
out<<binary_s(x)<<"\n";
}
}
}
int main(){
read();
solve();
return 0;
}