Pagini recente » Cod sursa (job #2774544) | Cod sursa (job #2979744) | Cod sursa (job #1336613) | Cod sursa (job #1612552) | Cod sursa (job #1210955)
#include<fstream>
#include<algorithm>
using namespace std;
int arb[100005],i,j,n,m,op,x,y;
void update(int poz,int aux) {
while(poz<=n) arb[poz]+=aux,poz+=(poz&(-poz));
}
int sum(int poz) {
int rs=0;
while(poz>=1) rs+=arb[poz],poz-=(poz&(-poz));
return rs;
}
int search(int x) {
int st=1,dr=n;
while(st<=dr)
{
int pivot=(st+dr)/2,s=sum(pivot);
if(s==x) return pivot;
else if(s>x) dr=pivot-1;
else st=pivot+1;
}
return -1;
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
cin>>n>>m;
for(i=1;i<=n;++i) cin>>x,update(i,x);
while(m--)
{
cin>>op;
if(!op) cin>>x>>y,update(x,y);
else if(op==1) cin>>x>>y,cout<<sum(y)-sum(x-1)<<'\n';
else cin>>x,cout<<search(x)<<'\n';
}
return 0;
}