Pagini recente » Cod sursa (job #1365275) | Cod sursa (job #2431577) | Cod sursa (job #47811) | Cod sursa (job #3181124) | Cod sursa (job #1952388)
#include <bits/stdc++.h>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
int v[100004], n;
void update(int pos, int val)
{
for(int i = pos; i <= n; i += zeros(i))
v[i] += val;
}
int query(int pos)
{
int rez = 0;
for(int i = pos; i > 0; i -= zeros(i))
rez += v[i];
return rez;
}
int cb(int val)
{
int st = 1, dr = n, mij;
while(st <= dr)
{
mij = (st + dr) / 2;
int vc = query(mij);
if(vc == val)
return mij;
if(vc < val)
st = mij + 1;
else dr = mij - 1;
}
return -1;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int c, a, b, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a);
update(i, a);
}
while(m--)
{
scanf("%d", &c);
if(c == 0)
{
scanf("%d%d", &a, &b);
update(a, b);
}
else if(c == 1)
{
scanf("%d%d", &a, &b);
printf("%d\n", query(b) - query(a - 1));
}
else
{
scanf("%d", &a);
printf("%d\n", cb(a));
}
}
return 0;
}