Pagini recente » Cod sursa (job #2961274) | Cod sursa (job #3003590) | Cod sursa (job #2707449) | Cod sursa (job #344117) | Cod sursa (job #2027157)
#include <fstream>
using namespace std;
#define Nmax 100005
ifstream fin("aib.in");
ofstream fout("aib.out");
int v,aib[Nmax],n,m;
int suma(int x){
int s=0;
while(x!=0){
s+=aib[x];
x=x&(x-1);
}
return s;
}
void adaug(int x,int v){
do
{
aib[x]+=v;
x+=x&(-x);
}while(x<=n);
}
int poz(int x){
int st=1,dr=n,mij,s,p=-1;;
while(st<=dr){
mij=(st+dr)/2;
s=suma(mij);
if(s==x){
p=mij;
dr=mij-1;
}
else
if(s>x)
dr=mij-1;
else
st=mij+1;
}
return p;
}
int main()
{
int a,b,op;
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>v;
adaug(i,v);
}
for(int i=1;i<=m;i++){
fin>>op;
switch(op){
case 0: {
fin>>a>>b;
adaug(a,b);
break;
}
case 1:{
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<"\n";
break;
}
case 2:{
fin>>a;
fout<<poz(a)<<"\n";
}
}
}
return 0;
}