Pagini recente » Cod sursa (job #512751) | Cod sursa (job #935755) | Cod sursa (job #2859292) | Cod sursa (job #1121779) | Cod sursa (job #2884252)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX=100005;
int N, M, aib[NMAX];
void update(int poz, int val){
for(int i=poz;i<=N;i+=(i&-i))
aib[i]+=val;
}
int query(int poz){
int sum=0;
for(int i=poz;i>=1;i-=(i&-i))
sum+=aib[i];
return sum;
}
int binarySearch(int val){
int st=1, dr=N, mij, sum;
while(st<=dr){
mij=(st+dr)/2;
sum=query(mij);
if(sum==val)
return mij;
if(sum<val)
st=mij+1;
else
dr=mij-1;
}
return -1;
}
int main()
{
fin>>N>>M;
int val;
for(int i=1;i<=N;i++){
fin>>val;
update(i,val);
}
int tip, a, b;
while(M--){
fin>>tip;
if(tip==0){
fin>>a>>b;
update(a,b);
}
else if(tip==1){
fin>>a>>b;
fout<<query(b)-query(a-1)<<'\n';
}
else{
fin>>a;
fout<<binarySearch(a)<<'\n';
}
}
fin.close();
fout.close();
return 0;
}