Pagini recente » Cod sursa (job #3163250) | Cod sursa (job #2049348) | Cod sursa (job #101217) | Cod sursa (job #1610952) | Cod sursa (job #2709228)
#include <fstream>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
int teme_no[100001];
int tsuke_wa[100001];
int n;
int next(int a)
{
return (a&(-a));
}
void kane_dewa(int val,int pos)
{
while(pos<=n)
{
tsuke_wa[pos]+=val;
pos+=next(pos);
}
}
int haraene_ze(int pos)
{
int sum=0;
while(pos)
{
sum=sum+tsuke_wa[pos];
pos-=next(pos);
}
return sum;
}
int ORA(int yare_yare)
{
int put=1;
while(put<=n)
put<<=1;
int i=0;
while(put)
{
if(i+put<=n&&tsuke_wa[i+put]<=yare_yare)
{
i+=put;
yare_yare-=tsuke_wa[i];
if(!yare_yare)
return i;
else if(yare_yare<0)
return -1;
}
put>>=1;
}
return -1;
}
int main()
{
int m;
in>>n>>m;
int x;
int q;
int a,b;
for(int i=1;i<=n;i++)
{
in>>teme_no[i];
kane_dewa(teme_no[i],i);
}
for(int i=1;i<=m;i++)
{
in>>q;
if(q==0)
{
in>>a>>b;
kane_dewa(b,a);
}
else if(q==1)
{
in>>a>>b;
out<<haraene_ze(b)-haraene_ze(a-1);
}
else if(q==2)
{
in>>a;
out<<ORA(a);
}
if(q)
out<<'\n';
}
return 0;
}