Pagini recente » Cod sursa (job #2537031) | Cod sursa (job #1234206) | Cod sursa (job #41600) | Cod sursa (job #827541) | Cod sursa (job #174350)
Cod sursa(job #174350)
# include <stdio.h>
# define input "aib.in"
# define output "aib.out"
# define max 100001
int a[max],i,n,s;
int x,y,q,tq,pow,j;
inline int bit(int x)
{
return (x&(x-1))^x;
}
void insert(int i, int x)
{
for(; i <= n; i+=bit(i))
a[i] += x;
}
int sum ( int x )
{
int ret = 0;
for(; x ; x-=bit(x))
ret += a[x];
return ret;
}
int main()
{
freopen(input, "r", stdin);
freopen(output, "w", stdout);
scanf("%d%d",&n,&q);
for ( i = 1; i <= n; i++)
{
scanf("%d", &x);
insert(i,x);
}
for( pow = 1 ;pow <= n ; pow <<= 1);
pow >>= 1;
while(q--)
{
scanf("%d",&tq);
if(tq == 0)
{
scanf("%d%d",&x,&y);
insert(x,y);
continue;
}
if(tq == 1)
{
scanf("%d%d",&x,&y);
printf("%d\n",sum(y) - sum(x-1));
continue;
}
scanf("%d",&x);
i = 0, j = pow, s = 0;
while( j )
{
if(i+j <= n && a[i+j] + s <= x ) {i+=j;s += a[i];}
j>>=1;
}
if( s == x )
printf("%d\n",i);
else
printf("-1\n");
}
return 0;
}