Pagini recente » Cod sursa (job #1980835) | Cod sursa (job #324754) | Cod sursa (job #198165) | Cod sursa (job #878762) | Cod sursa (job #1104391)
#include<fstream>
#include<iostream>
using namespace std;
int N,M,aib[100100];
int suma(int nod) {
int s=0;
while(nod) {
s+=aib[nod];
nod-=(nod&-nod);
}
return s;
}
void update(int nod,int val) {
while(nod<=N) {
aib[nod]+=val;
nod+=(nod&-nod);
}
}
int cautbin(int x) {
int st,dr,mij;
st=1;
dr=N;
while(st<=dr){
mij=(st+dr)/2;
if(suma(mij)==x)
return mij;
if(suma(mij)<x)
st = mij+1;
else
dr = mij-1;
}
return -1;
}
int main () {
ifstream in("aib.in");
ofstream out("aib.out");
int i,a,b,x,k,operatie;
in>>N>>M;
for(i=1;i<=N;i++){
in>>x;
update(i,x);
}
for(i=1;i<=M;i++) {
in>>operatie;
if(operatie==0) {
in>>a>>b;
update(a,b);
}
if(operatie==1) {
in>>a>>b;
out<<suma(b)-suma(a-1)<<'\n';
}
if(operatie==2) {
in>>k;
out<<cautbin(k)<<'\n';
}
}
in.close();
out.close();
return 0;
}