Pagini recente » Cod sursa (job #2166795) | Cod sursa (job #2065838) | Cod sursa (job #1355436) | Cod sursa (job #473475) | Cod sursa (job #1622585)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100005], n, m;
void Up (int pos, int value)
{
while (pos <= n)
{
aib[pos] += value;
pos += (pos&(-pos));
}
}
int Query (int pos)
{
int s = 0;
while (pos > 0)
{
s += aib[pos];
pos -= (pos&(-pos));
}
return s;
}
int Position (int value)
{
int left = 1, right = n, index = -1;
while (left <= right)
{
int middle = (left + right) / 2;
int sum = Query(middle);
if (sum == value)
{
index = middle;
right = middle - 1;
}
if (sum > value)
right = middle - 1;
else
left = middle + 1;
}
return index;
}
int main()
{
fin >>n >>m;
for (int i = 1; i <= n; ++i)
{
int x;
fin >>x;
Up(i, x);
}
for (int i = 1; i <= m; ++i)
{
int cod, x, y;
fin >>cod;
if (cod == 0)
{
fin >>x >>y;
Up(x, y);
}
if (cod == 1)
{
fin >>x >>y;
fout <<Query(y) - Query(x-1) <<'\n';
}
if (cod == 2)
{
fin >>x;
fout <<Position(x) <<'\n';
}
}
return 0;
}