Pagini recente » Cod sursa (job #3261424) | Cod sursa (job #1694480) | Cod sursa (job #885990) | Cod sursa (job #2594533) | Cod sursa (job #1656804)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,arb[100005];
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;int v,x,y;
for(int i=1;i<=n;i++){
f>>x;
update(i,x);
}
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;
}