Pagini recente » Cod sursa (job #1960919) | Cod sursa (job #1532093) | Cod sursa (job #1122703) | Cod sursa (job #210391) | Cod sursa (job #407397)
Cod sursa(job #407397)
#include<stdio.h>
#define Nmax 100005
int aib[Nmax],N,tot;
void add(int poz,int val)
{
for(int t=poz; t<=N; t += (t&-t))
aib[t] += val;
}
int querry(int poz)
{
int Sol=0;
for(int t=poz; t ; t-= (t&-t))
Sol += aib[t];
return Sol;
}
int find(int val)
{
int i,step;
for(step=1; step<N ; step<<=1);
for(i=0; step ; step>>=1)
if (step+i<=N && aib[i+step]<=val)
{
i+=step;
val-=aib[i];
if (!val)
return i;
}
return -1;
}
void solve()
{
int M,a,b,c,x;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i)
{
scanf("%d",&a);
add(i,a);
tot+=a;
}
for(int i=1;i<=M;++i)
{
scanf("%d%d",&x,&a);
if (x==0)
{
scanf("%d",&b);
add(a,b);
tot+=b;
}
if (x==1)
{
scanf("%d",&b);
printf("%d\n",querry(b)-querry(a-1));
}
if (x==2)
printf("%d\n",find(a));
}
}
int main()
{
solve();
return 0;
}