Pagini recente » Cod sursa (job #3030847) | Cod sursa (job #111523) | cnlr_x_round1 | Cod sursa (job #888284) | Cod sursa (job #1606103)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "aib.in"
#define out "aib.out"
#define dim 100001
int N,M,T;
int Arb[dim];
int C,S;
int gstep;
int Search(int val)
{
int i,step=gstep;
for(i = 0; step; step >>= 1)
if(i+step<=N&&
val>=Arb[i+step])
{
i += step,val -= Arb[i];
if(!val) return i;
}
return -1;
}
void Update(int poz,int val)
{
C = 0;
while(poz<=N)
{
Arb[poz] += val;
poz+=(((poz^(poz-1))+1)>>1);
}
}
int Query(int poz)
{
S = 0;
while(poz > 0)
{
S += Arb[poz];
poz=poz&(poz-1);
}
return S;
}
int main()
{
int K,X,Y;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d",&N,&M);
for(gstep = 1; gstep < N; gstep <<= 1);
for(int i = 1; i<=N; i++)
{
scanf("%d",&T);
Update(i,T);
}
for(; M; M--)
{
scanf("%d",&K);
if(K < 2)
{
scanf("%d%d",&X,&Y);
if(!K) Update(X,Y);
else printf("%d\n",Query(Y)-Query(X-1));
}
else
{
scanf("%d",&X);
printf("%d\n",Search(X));
}
}
}