Pagini recente » Cod sursa (job #1037979) | Cod sursa (job #2945406) | Cod sursa (job #771676) | Cod sursa (job #1814648) | Cod sursa (job #303982)
Cod sursa(job #303982)
#include <fstream.h>
inline int Minim(int a, int b)
{ if ( a < b ) return a;
return b;}
int N,M,a,b,A[100001],p,i=1;
void act(int a, int b)
{p=0;
while(a<=N)
{A[a]+=b;
while(!(a&(1<<p)))
++p;
a+=1<<p;
++p;}
}
int in(int a)
{p=0;b=0;
while(a>0)
{b+=A[a];
while(!(a&(1<<p)))
++p;
a-=1<<p;
++p;
}
return b;}
int caut(int a)
{i=0;p=1;
while(p<N)
p<<=1;
while(p&&i+p<=N)
{if(a>=A[i+p])
{i+=p;a-=A[i];
if(!a)return i;
}
p>>=1;
}
return -1;}
int main()
{ifstream f("aib.in");
ofstream g("aib.out");
f>>N>>M;
for(;i<=N;++i)
{f>>a;
act(i,a);}
for(;M;--M)
{f>>p;
if(p<2)
{f>>a>>b;
if(!p)act(a,b);
else g<<in(b)-in(a-1)<<'\n';}
else
{f>>a;
g<<caut(a)<<'\n';
}
}
return 0;
}