Pagini recente » Cod sursa (job #2504886) | Cod sursa (job #3149611) | Cod sursa (job #941810) | Cod sursa (job #2162560) | Cod sursa (job #3274232)
//https://infoarena.ro/problema/aib
//#pragma GCC optimize ("Ofast")
//#pragma GCC optimize ("fast-math")
//#pragma GCC optimize ("unroll-loops")
//#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <cmath>
#include <bitset>
#include <vector>
//#include <queue>
//#include <utility>
//#include <algorithm>
//#include <string>
//#include <map>
//#include <climits>
//#include <iomanip>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[100010];
void update(int p, int val, int n)
{
int i;
for (i = p; i <= n; i += i & (-i))
{
v[i] += val;
}
}
int suma(int p)
{
int i, rez = 0;
for (i = p; i >= 1; i -= i & (-i))
{
rez += v[i];
}
return rez;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m, in, a, b;
int i, j, rez, val, p, putd;
fin >> n >> m;
for (i = 1; i <= n; ++i)
{
fin >> val;
update(i, val, n);
}
for (putd = 1; putd <= n; putd = putd << 1);
putd = putd >> 1;
for (i = 1; i <= m; ++i)
{
fin >> in;
if (in == 0)
{
fin >> a >> b;
update(a, b, n);
}
else if (in == 1)
{
fin >> a >> b;
fout << (suma(b) - suma(a - 1)) << "\n";
}
else
{
fin >> a;
rez = -1;
for (j = 0, p = putd; p != 0; p = p >> 1)
{
if ((j + p <= n) && (v[j + p] <= a))
{
j += p;
a -= v[j];
if (a == 0)
{
rez = j;
break;
}
}
}
fout << rez << "\n";
}
}
return 0;
}