Pagini recente » Cod sursa (job #1897557) | Cod sursa (job #1581029) | Cod sursa (job #616158) | Cod sursa (job #1684759) | Cod sursa (job #2802953)
#include <bits/stdc++.h>
#define ub(x) (x & (-x))
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
constexpr int NMAX = 1e5 + 3;
int n, m, q, a, b, x;
int aib[NMAX];
void update(int x, int val)
{
for(int i = x; i <= n; i += ub(i))
aib[i] += val;
return;
}
int query(int x)
{
int ans = 0;
for(int i = x; i > 0; i -= ub(i))
ans += aib[i];
return ans;
}
int sum(int x, int y)
{
return query(y) - query(x - 1);
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
fin >> x, update(i, x);
for(int i = 1; i <= m; i ++)
{
fin >> q;
if(q == 0)
fin >> a >> b, update(a, b);
else if(q == 1)
fin >> a >> b, fout << sum(a, b) << '\n';
else {
fin >> a;
int l = 1, r = n, poz = -1, mid;
while(l <= r)
{
mid = (l + r) >> 1;
if(sum(1, mid) == a){
poz = mid;
break;
}
if(sum(1, mid) > a)
r = mid - 1;
else l = mid + 1;
}
fout << poz << '\n';
}
}
return 0;
}