Pagini recente » Cod sursa (job #122788) | Cod sursa (job #1261405) | Cod sursa (job #2599068) | Cod sursa (job #1206926) | Cod sursa (job #3319774)
#include<iostream>
#include<fstream>
#define NMAX 100007
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,A[NMAX];
int BIT[NMAX];
int lsb(int x){
return x&(-x);
}
void update(int pos, int val){
for(int i=pos; i<=N; i+=lsb(i))
BIT[i]+=val;
}
int query(int pos){
int s=0;
for(int i=pos; i>0; i-=lsb(i))
s+=BIT[i];
return s;
}
int binary_search(int val){
int left=1, right=N, mid;
while(left<=right)
{
mid=(left+right)/2;
if(query(mid) == val)
return mid;
if(query(mid) < val)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int main(){
fin>>N>>M;
for(int i=1; i<=N; ++i){
fin>>A[i];
update(i, A[i]);
}
int op, a, b;
for(int i=0; i<M; ++i){
fin>>op;
if(op==0){
fin>>a>>b;
update(a, b);
}
else if(op==1){
fin>>a>>b;
fout<<query(b)-query(a-1)<<'\n';
}
else if(op==2){
fin>>a;
fout<<binary_search(a)<<'\n';
}
}
return 0;
}