Pagini recente » Cod sursa (job #1538706) | Cod sursa (job #69524) | Cod sursa (job #759396) | Cod sursa (job #1918191) | Cod sursa (job #2331406)
#include<bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int Aib[NMAX];
int n,m,x,y,val,poz,start,finish;
int op;
void add(){
while(poz<=n)
{
Aib[poz]=Aib[poz]+val;
poz+=(poz&(-poz));
}
}
int sum(int pozi)
{
int s=0;
while(pozi>0)
{
s+=Aib[pozi];
pozi-=(pozi&(-pozi));
}
return s;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)
{
f>>val;
poz=i;
add();
}
while(m--)
{
f>>op;
if(op==0)
{
f>>poz>>val;
add();
} else if(op==1){
f>>start>>finish;
g<<sum(finish)-sum(start-1)<<'\n';
} else if(op==2)
{
int cauta;
f>>cauta;
int dr,st;
int mij;
int sol=-1;
st=1;
dr=n;
while(st<=dr)
{
int mij=(st+dr)/2;
int suma=sum(mij);
if(suma>cauta)
{
dr=mij-1;
} else if(suma<cauta)
{
st=mij+1;
} else {
sol=mij;
dr=mij-1;
}
}
g<<sol<<'\n';
}
}
return 0;
}