Pagini recente » Cod sursa (job #1880846) | Cod sursa (job #253368) | Cod sursa (job #321849) | Cod sursa (job #178874) | Cod sursa (job #526036)
Cod sursa(job #526036)
#include <algorithm>
using namespace std;
#define DIM 100005
int aib[DIM];
int n,m;
inline int lsb (int x)
{
return x&-x;
}
inline void update (int poz,int val)
{
for ( ; poz<=n; poz+=lsb (poz))
aib[poz]+=val;
}
void read ()
{
int i,x;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
{
scanf ("%d",&x);
update (i,x);
}
}
inline int query (int poz)
{
int sum;
for (sum=0; poz; poz-=lsb (poz))
sum+=aib[poz];
return sum;
}
inline int search (int val)
{
int i,step;
for (step=1; step<n; step<<=1);
for (i=0; step; step>>=1)
if (i+step<=n && val>=aib[i+step])
{
i+=step;
val-=aib[i];
if (val==0)
return i;
}
return -1;
}
void solve ()
{
int i,tip,x,y;
for (i=1; i<=m; ++i)
{
scanf ("%d",&tip);
if (tip==2)
{
scanf ("%d",&x);
printf ("%d\n",search (x));
}
else
{
scanf ("%d%d",&x,&y);
if (!tip)
update (x,y);
else
printf ("%d\n",query (y)-query (x-1));
}
}
}
int main ()
{
freopen ("aib.in","r",stdin);
freopen ("aib.out","w",stdout);
read ();
solve ();
return 0;
}