Pagini recente » Cod sursa (job #1103311) | Cod sursa (job #2159509) | Cod sursa (job #896478) | Cod sursa (job #1205802) | Cod sursa (job #1656801)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,val[100005],arb[200005];
void update(int nod,int valoare){
while(nod<=n){
arb[nod]+=valoare;
nod+=(nod&(-nod));
}
}
int suma(int nod){
int s=0;
while(nod){
s+=arb[nod];
nod-=(nod&(-nod));
}
return s;
}
int query(int a){
int st=1,dr=n;
int mij=(st+dr)/2;
int valo=suma(mij);
while(valo!=a && st<=dr){
if(a<valo){
dr=mij-1;
}else{
st=mij+1;
}
mij=(st+dr)/2;
valo=suma(mij);
}
if(st<=dr){
return mij;
}else{
return -1;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++){
f>>val[i];
update(i,val[i]);
}
int v,x,y;
for(int i=0;i<m;i++){
f>>v>>x;
if(v==0){
f>>y;
update(x,y);
}else if (v==1){
f>>y;
g<<suma(y)-suma(x-1)<<"\n";
}else if(v==2){
g<<query(x)<<"\n";
}
}
return 0;
}