Pagini recente » Cod sursa (job #1472098) | Cod sursa (job #2920345) | Cod sursa (job #731885) | Cod sursa (job #461385) | Cod sursa (job #1619246)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
#define MAXN 100005
int aib[MAXN], N, M;
void Update (int pos, int value)
{
while (pos <= N)
{
aib[pos] += value;
pos += (pos&(-pos));
}
}
int Query (int pos)
{
int s;
s = 0;
while (pos > 0)
{
s += aib[pos];
pos -= (pos&(-pos));
}
return s;
}
int Position (int value)
{
int left = 1, right = N;
while (left <= right)
{
int middle = (left + right) / 2;
int sum = Query(middle);
if (sum == value)
return middle;
if (sum > value)
right = middle - 1;
else
left = middle + 1;
}
}
int main()
{
fin >>N >>M;
for (int i = 1; i <= N; ++i)
{
int x;
fin >>x;
Update(i, x);
}
for (int i = 1; i <= M; ++i)
{
int cod, x, y;
fin >>cod;
if (cod == 0)
{
fin >>x >>y;
Update(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;
}