Pagini recente » Cod sursa (job #2645593) | Cod sursa (job #2408446) | Cod sursa (job #1600200) | Cod sursa (job #2420267) | Cod sursa (job #1655334)
#include <fstream>
using namespace std;
int n,m;
int aib[100001];
int DMAX;
int last(int a)
{
return (a&(~(a-1)));
}
void update(int pos,int val)
{
for(int i=pos; i<=n; i+=last(i))
aib[i]+=val;
}
int query(int x)
{
int res=0;
for(int i=x; i>0; i-=last(i))
res+=aib[i];
return res;
}
int Search(int val)
{
int i, step;
for ( step = 1; step < n; step <<= 1 );
for( i = 0; step; step >>= 1 )
{
if( i + step <= n)
{
if( val >= aib[i+step] )
{
i += step, val -= aib[i];
if ( !val ) return i;
}
}
}
return -1;
}
int main()
{
FILE *fin,*fout;
fin=fopen("aib.in","r");
fout=fopen("aib.out","w");
fscanf(fin,"%d%d",&n,&m);
int i;
int x;
for(i=1; i<=n; i++)
{
fscanf(fin,"%d",&x);
update(i,x);
}
int ins;
int a,b;
for(i=1; i<=m; i++)
{
fscanf(fin,"%d",&ins);
if(ins<=1)
{
fscanf(fin,"%d%d",&a,&b);
if(ins)
{
fprintf(fout,"%d\n",query(b)-query(a-1));
}
else
{
update(a,b);
}
}
else
{
fscanf(fin,"%d",&a);
fprintf(fout,"%d\n",Search(a));
}
}
return 0;
}