Pagini recente » Borderou de evaluare (job #1588439) | Cod sursa (job #90262) | Borderou de evaluare (job #1540789) | Monitorul de evaluare | Cod sursa (job #3322271)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
#define fin cin
#define fout cout
int n, m;
vector<int> v;
void add(int x, int y)
{
for (int i = x; i <= n; i += (i & -i))
{
v[i] += y;
}
}
int sum(int x)
{
int cnt = 0;
for (int i = x; i >= 1; i -= (i & -i))
{
cnt += v[i];
}
return cnt;
}
int check(int k)
{
for (int i = 1; i <= n; i++)
{
if (sum(i) == k)
{
return i;
}
else if (sum(i) > k)
{
return -1;
}
}
return -1;
}
int main()
{
fin >> n >> m;
v.resize(n + 1);
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
add(i, x);
}
for (int i = 0; i < m; i++)
{
int a;
fin >> a;
if (a == 0)
{
int b, c;
fin >> b >> c;
add(b, c);
}
else if (a == 1)
{
int b, c;
fin >> b >> c;
fout << sum(c) - sum(b - 1) << '\n';
}
else
{
int b;
fin >> b;
fout << check(b);
fout << '\n';
}
}
return 0;
}