Pagini recente » Cod sursa (job #895754) | Cod sursa (job #3154131) | Cod sursa (job #1698227) | Cod sursa (job #1806798) | Cod sursa (job #1694475)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
long long n, m, a[NMAX], BIT[NMAX];
void update(int x, int val){
for(;x<=n; x+=x&(-x))BIT[x]+=val;
}
int query(int x){
int s=0;
for(; x>0; x-=x&(-x))s+=BIT[x];
return s;
}
int searchForValue(int a){
for(int i=1; i<=n; i++){
if(query(i)==a)return i;
}
return -1;
}
void init(){
for(int i=1; i<=n; i++)update(i, a[i]);
}
void read(){
in>>n>>m;
int op, X, B;
long A;
for(int i=1; i<=n; i++)in>>a[i];
init();
a[0]=0;
for(int i=1; i<=m; i++){
in>>op;
if(op==0){
in>>X>>B;
a[X]+=B;
update(X, B);
}else if(op==1){
in>>X>>B;
out<<query(B)-query(X-1)<<"\n";
}else{
in>>A;
out<<searchForValue(A)<<"\n";
}
}
}
int main(){
read();
return 0;
}