Pagini recente » Cod sursa (job #2792754) | Cod sursa (job #9317) | Cod sursa (job #840723) | Cod sursa (job #1159840) | Cod sursa (job #2760726)
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[nmax];
int n,m;
int query(int x){
int rez=0;
while(x){
rez+=aib[x];
x-= ((-x)&x);
}
return rez;
}
void update(int x,int val){
while(x<=n){
aib[x]+=val;
x+= x&(-x);
}
}
int binS(int st,int dr,int val){
int mij=(st+dr)/2;
if(st==dr){
if(query(mij)==val)return mij;
else return -1;
}
if(query(mij)>=val)binS(st,mij,val);
else binS(mij+1,dr,val);
}
int main(){
in>>n>>m;
int nr;
in>>nr;
aib[0]=0;
aib[1]=nr;
for(int i=2;i<=n;i++){
in>>nr;
aib[i]=nr+query(i-1)-query(i-(i&(-i)));
}
for(int i=0;i<m;i++){
int c;
in>>c;
int a,b;
switch (c){
case 0:
in>>a>>b;
update(a,b);
break;
case 1:
in>>a>>b;
out<<query(b)-query(a-1)<<'\n';
break;
case 2:
in>>a;
out<<binS(1,n,a)<<'\n';
}
}
}