Pagini recente » Cod sursa (job #1628237) | Cod sursa (job #1121355) | Cod sursa (job #1646078) | Cod sursa (job #1145460) | Cod sursa (job #1894015)
#include <cstdio>
using namespace std;
const int nmx = 100002;
int n,tests,bit[nmx];
int query(int pos)
{
int sum = 0;
while(pos)
{
sum += bit[pos];
pos -= pos & (-pos);
}
return sum;
}
void update(int pos, int val)
{
while(pos <= n)
{
bit[pos] += val;
pos += pos & (-pos);
}
}
void input_data()
{
scanf("%d %d", &n, &tests);
for(int i = 1; i <= n; ++i)
{
int val;
scanf("%d", &val);
update(i,val);
}
}
int cautbin(int val)
{
int st = 1, dr = n, mij;
while(st <= dr)
{
mij = query((st+dr)/2);
if(mij == val)
return (st + dr) / 2;
if(mij > val)
dr = (st + dr) / 2 - 1;
else
st = (st + dr) / 2 + 1;
}
return -1;
}
void test_data()
{
for(int i = 1; i <= tests; ++i)
{
int c,a,b;
scanf("%d %d", &c, &a);
if(c == 0)
{
scanf("%d", &b);
update(a,b);
}
else if(c == 1)
{
scanf("%d", &b);
printf("%d\n", query(b) - query(a-1));
}
else
printf("%d\n", cautbin(a));
}
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
input_data();
test_data();
return 0;
}