Pagini recente » Cod sursa (job #1998880) | Cod sursa (job #677526) | Cod sursa (job #1808949) | Cod sursa (job #1393956) | Cod sursa (job #1362595)
#include <stdio.h>
#define NMAX 100023
FILE *fin, *fout;
int aib[NMAX], x, y, z, n, m, temp;
void update(int pos, int val)
{
while(pos <= n)
{
aib[pos]+=val;
pos+= pos & (pos ^ (pos-1));
}
}
int query(int pos)
{
int sol = 0;
while(pos)
{
sol += aib[pos];
pos -= pos & (pos ^ (pos-1));
}
return sol;
}
int query2(int Sum)
{
int w = 1;
while(w < n) w <<= 1;
for(int i = 0; w; w >>= 1)
if(i + w <= n)
if(Sum >= aib[i + w])
{
i += w;
Sum -= aib[i];
if(! Sum) return i;
}
return -1;
}
int main()
{
fin = freopen("aib.in", "r", stdin);
fout= freopen("aib.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i<= n; i++)
{
scanf("%d", &temp);
update(i, temp);
}
for(int i = 0; i< m; i++)
{
scanf("%d", &x);
if(x == 0)
{
scanf("%d%d", &y, &z);
update(y, z);
}
if(x == 1)
{
scanf("%d%d", &y, &z);
printf("%d\n", query(z) - query(y-1));
}
if(x == 2)
{
scanf("%d", &y);
printf("%d\n", query2(y));
}
}
fclose(fin);
fclose(fout);
return 0;
}