Pagini recente » Cod sursa (job #1579929) | Cod sursa (job #3341297) | Cod sursa (job #2717033) | Cod sursa (job #1013377) | Cod sursa (job #3313674)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int i, aib[100010], n, m, v[100010], a, b, c;
void update(int p, int x)
{
v[p] += x;
for (int i = p; i <= n; i += (i & (-i)))
aib[i] += x;
}
int qu1(int p)
{
int s = 0;
for (int i = p; i >= 1; i -= (i & (-i)))
{
s += aib[i];
}
return s;
}
int qu2(int s)
{
int k = (2 << int(log2(n)));
int x = 0;
int sum = 0;
while (k)
{
if (sum + aib[x + k] <= s && x + k <= n)
{
x += k;
sum += aib[x];
}
k /= 2;
}
if (sum == s)
return x;
else
return -1;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
fin >> n >> m;
int x;
for (i = 1; i <= n; i++)
{
fin >> x;
update(i, x);
}
for (i = 1; i <= m; i++)
{
fin >> c;
if (c == 0)
{
fin >> a >> b;
update(a, b);
}
else if (c == 1)
{
fin >> a >> b;
fout << qu1(b) - qu1(a - 1) << '\n';
}
else
{
fin >> a;
fout << qu2(a) << '\n';
}
}
return 0;
}