Pagini recente » Cod sursa (job #1197898) | Cod sursa (job #2600907) | Cod sursa (job #1629524) | Cod sursa (job #2403062) | Cod sursa (job #903124)
Cod sursa(job #903124)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MN 100002
#define zeros(x) x&-x
#define MaxStep 1<<17
int AIB[MN];
int N;
void Add(int pos, int val)
{
for (int i = pos; i <= N; i += zeros(i))
AIB[i] += val;
}
int Compute(int pos)
{
int ret = 0;
for (int i = pos; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int Search(int val)
{
long i,step,t;
step = MaxStep;
for(i=N;step>0;step>>=1)
{
t = i-step;
if(t>0) if(t<N && Compute(t)>=val)
i-=step;
}
return i;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int m,type,x,y;
scanf("%d%d",&N,&m);
for(int i=1;i<=N;++i)
{
scanf("%d",&x);
Add(i,x);
}
while(m--)
{
scanf("%d",&type);
if(type==0)
{
scanf("%d%d",&x,&y);
Add(x,y);
}
else if(type==1)
{
scanf("%d%d",&x,&y);
printf("%d\n",Compute(y)-Compute(x-1));
}
else
{
scanf("%d",&x);
printf("%d\n",Search(x));
}
}
return 0;
}