Pagini recente » Cod sursa (job #2269435) | Cod sursa (job #2681261) | Cod sursa (job #1415039) | Cod sursa (job #2914824) | Cod sursa (job #2327218)
//#include "pch.h"
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m;
long long aib[100005];
void update(int position, int value)
{
while (position <= n)
{
aib[position] += value;
position += position & (-position);
}
}
int query(int position)
{
int ans = 0;
while (position)
{
ans += aib[position];
position -= position & (-position);
}
return ans;
}
void getSum(int left, int right)
{
fout << query(right) - query(left)<<'\n';
}
void findPosition(int sum)
{
int i = 0;
for (int power = 20; power >= 0; --power)
{
if (i + (1 << power) <= n && aib[i + (1 << power)] <= sum)
{
i += (1 << power);
sum -= aib[i];
}
}
if (i && !sum) fout << i << '\n';
else fout << -1 << '\n';
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0); fout.tie(0);
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 type;
fin >> type;
if (type == 0)
{
int pos, x;
fin >> pos >> x;
update(pos, x);
}
if (type == 1)
{
int left, right;
fin >> left >> right;
getSum(left - 1, right);
}
if (type == 2)
{
int y;
fin >> y;
findPosition(y);
}
}
}