Pagini recente » Cod sursa (job #1911940) | Cod sursa (job #521572) | Cod sursa (job #2683091) | Cod sursa (job #2187949) | Cod sursa (job #1553368)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,op,x,y;
int aib[100001], a[100001];
void update(int a, int b)
{
while(a<=n)
{
aib[a]+=b;
a=a+(a&(-a));
}
}
int query(int a, int b)
{
int suma=0;
while(b>0)
{
suma+=aib[b];
b=b-(b&(-b));
}
--a;
while(a>0)
{
suma-=aib[a];
a=a-(a&(-a));
}
return suma;
}
int poz(int a)
{
int l=1;
int r=n;
while(l<=r)
{
int mid=(l+r)/2;
if(query(1,mid)>a)
r=mid-1;
else l=mid+1;
}
return r;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a[i];
a[i]+=a[i-1];
}
for(i=1;i<=n;i++)
aib[i]=a[i]-a[i-(i&(-i))];
for(i=1;i<=m;i++)
{
fin>>op;
if(op==0)
{
fin>>x>>y;
update(x,y);
}
else if(op==1)
{
fin>>x>>y;
fout<<query(x,y)<<'\n';
}
else
{
fin>>x;
fout<<poz(x)<<'\n';
}
}
return 0;
}