Pagini recente » tema | Cod sursa (job #434750) | Cod sursa (job #771762) | Cod sursa (job #808108) | Cod sursa (job #2970669)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int v[100003];
int ai[100003];
int n;
void build(int poz,int val)
{
if(poz>n)
return;
ai[poz]=ai[poz]+val;
build(poz+(poz&(-poz)),val);
}
void update(int poz,int val)
{
if(poz>n)
return;
ai[poz]=ai[poz]+val;
update(poz+(poz&(-poz)),val);
}
int getsum(int poz)
{
if(poz==0)
return 0;
return ai[poz]+getsum(poz-(poz&(-poz)));
}
int main()
{
int m,i,op,a,b,st,dr,mij,ok;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>v[i];
build(i,v[i]);
}
for(i=1;i<=m;i++)
{
f>>op;
if(op==0)
{
f>>a>>b;
update(a,b);
}
if(op==1)
{
f>>a>>b;
g<<getsum(b)-getsum(a-1)<<'\n';
}
if(op==2)
{
f>>a; ok=0;
st=1; dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
b=getsum(mij);
if(b==a)
{
ok=1;
g<<mij<<'\n';
break;
}
if(b<a)
{
st=mij+1;
}
if(b>a)
{
dr=mij-1;
}
}
if(ok==0)
{
g<<"-1"<<'\n';
}
}
}
return 0;
}