Pagini recente » Cod sursa (job #2845479) | Cod sursa (job #1085529) | Cod sursa (job #3267859) | Cod sursa (job #2556488) | Cod sursa (job #411623)
Cod sursa(job #411623)
#include<stdio.h>
const char in[]="aib.in", out[]="aib.out";
int v[100005], n;
void add(int x, int val)
{
for(;x<=n;x += x & -x)
v[ x ] += val;
}
int query(int x)
{int sol=0;
for(;x>0; x -= x & -x)
sol += v[x];
return sol;
}
int search(int x)
{int i, j;
for(i=1; i <n; i <<= 1);
for(j=0; i ; i >>= 1)
if(j+i <= n)
if(x >= v[j+i])
{
j +=i, x -= v[j];
if(!x)return j;
}
return -1;
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
int x, y, op, m;
scanf("%d%d", &n, &m);
for(int i=1;i<=n;++i)scanf("%d", &x), add(i, x);
for(;m--;)
{
scanf("%d", &op);
if(op<2)
{
scanf("%d%d", &x, &y);
if(!op)add(x, y);
else printf("%d\n", query(y)-query(x-1));
}
else scanf("%d", &x), printf("%d\n",search(x));
}
return 0;
}