Pagini recente » Cod sursa (job #2230712) | Cod sursa (job #2057296) | Cod sursa (job #1645784) | Cod sursa (job #1645768) | Cod sursa (job #2720749)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long aib[200005], poz;
int n,m;
void add_to_aib(long long poz, long long val){
long long i;
for(i = poz; i <= n ;i += (i&(-i))){
aib[i] += val;
}
}
long long sum( long long poz){
long long S=0,i;
for(i = poz; i >= 1; i-= (i&(-i))){
S+= aib[i];
}
return S;
}
long long query(long long a, long long b){
return (sum(b)-sum(a-1));
}
void cautare_binara(long long val, int left, int right){
if(left > right){
return;
}
int mid = left + (right-left)/2;
int valmid = sum(mid);
if(valmid == val){
poz = mid;
cautare_binara(val, left, mid-1);
}else{
if(val < valmid){
cautare_binara(val, left, mid-1);
}else{
cautare_binara(val, mid+1, right);
}
}
}
int main(){
int i,aux,p;
long long a,b;
fin>>n>>m;
for(i = 1; i <= n; i++){
fin>>aux;
add_to_aib(i,aux);
}
for(i = 1; i <= m; i++){
fin>>p;
if(p == 0){
fin>>a>>b;
add_to_aib(a,b);
}else if(p == 1){
fin>>a>>b;
fout<<query(a,b)<<'\n';
}else if(p == 2){
fin>>a;
poz = -1;
cautare_binara(a,1,n);
fout<<poz<<'\n';
}
}
return 0;
}