Pagini recente » Cod sursa (job #1558038) | Cod sursa (job #2710964) | Cod sursa (job #2890250) | Cod sursa (job #836353) | Cod sursa (job #1256220)
#include <fstream>
using namespace std;
int aib [100001];
inline int lsb (int x)
{
return x&(x-1)^x;
}
void update (int n, int poz, int val)
{
for( ; poz<=n; poz+=lsb(poz))
aib[poz]+=val;
}
int query (int b)
{
int s=0;
for(; b; b-=lsb(b))
s+=aib[b];
return s;
}
int main()
{
ifstream in("aib.in");
ofstream out("aib.out");
int n,m,i,x,op,a,b,k,inc,sfr,mij,aux;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>x;
update(n,i,x);
}
for(i=1;i<=m;i++)
{
in>>op;
if(op==0)
{
in>>a>>b;
update(n,a,b);
}
if(op==1)
{
in>>a>>b;
out<<query(b)-query(a-1)<<'\n';
}
if(op==2)
{
in>>a;
inc=1;
sfr=n;
k=-1;
while(inc<=sfr)
{
mij=(inc+sfr)>>1;
aux=query(mij);
if(aux>=a)
{
if(aux==a)
k=mij;
sfr=mij-1;
}
else
inc=mij+1;
}
out<<k<<"\n";
}
}
return 0;
}