Pagini recente » Cod sursa (job #3236932) | Cod sursa (job #344469) | Cod sursa (job #2563197) | Cod sursa (job #340948) | Cod sursa (job #1329948)
#include <fstream>
#define bit(x) ((x ^ (x - 1) & x))
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,aib[100002],op;
void add(int x,int y){
for(int i=x;i<=n;i+=bit(i))
aib[i]+=y;
}
int suma(int x){
int s=0;
for(int i=x;i>0;i-=bit(i))
s+=aib[i];
return s;
}
int cauta(int x){
int p=1,u=n,mid,val;
while(p<=u){
mid=(p+u)>>1;
val=suma(mid);
if(val==x)
return mid;
else{
if(val>x)
u=mid-1;
else
p=mid+1;
}
}
return -1;
}
int main(){
fin>>n>>m;
for(int i=1;i<=n;i++){
int x;
fin>>x;
add(i,x);
}
while(m--){
fin>>op;
if(op==0){
int a,b;
fin>>a>>b;
add(a,b);
}
if(op==1){
int a,b;
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<"\n";
}
if(op==2){
int a;
fin>>a;
fout<<cauta(a)<<"\n";
}
}
fin.close();fout.close();
return 0;
}