/*
Ben Watson
Handle codeforces : quangminh98
Current Theme: Transformers !!!!
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const string name = "test";
void solve();
signed main()
{
if (fopen((name + ".inp").c_str(), "r"))
{
freopen((name + ".inp").c_str(), "r", stdin);
freopen((name + ".out").c_str(), "w", stdout);
}
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
return 0;
}
// main program
const int maxn = 1e5 + 1;
struct FenwickTree
{
vector<int> bits;
int n;
FenwickTree(int n) : n(n) { bits.resize(n + 1, 0); }
void update(int pos, int val)
{
for (; pos <= n; pos += (pos & (-pos)))
bits[pos] += val;
}
void update(int l, int r, int val)
{
if (l > r)
return;
if (r + 1 <= n)
update(r + 1, -val);
update(l, val);
}
int query(int pos)
{
int res = 0;
for (; pos > 0; pos -= (pos & (-pos)))
res += bits[pos];
return res;
}
};
int n, m;
int a[maxn];
FenwickTree bit(maxn);
int Greater(int x) // first position i such as a[i] >= x
{
int l = 1, r = n;
int res = n + 1;
while (l <= r)
{
int mid = l + r >> 1;
if (bit.query(mid) >= x)
{
res = mid;
r = mid - 1;
} else
l = mid + 1;
}
return res;
}
int Less(int x) // last position i such as a[i] <= x
{
int l = 1, r = n;
int res = 0;
while (l <= r)
{
int mid = l + r >> 1;
if (bit.query(mid) <= x)
{
res = mid;
l = mid + 1;
} else
r = mid - 1;
}
return res;
}
void solve()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
bit.update(i, i, a[i]);
while (m--)
{
char type; cin >> type;
if (type == 'F')
{
int c, h; cin >> c >> h;
int st = Greater(h);
if (st == n + 1)
continue;
c = min(c, n - st + 1);
int val = bit.query(st + c - 1);
int R = Less(val), L = Greater(val), cnt = st + c - L;
bit.update(st, L - 1, 1);
bit.update(R - cnt + 1, R, 1);
} else
{
int l, r; cin >> l >> r;
int L = Greater(l), R = Less(r);
cout << max(0, R - L + 1) << '\n';
}
}
}
Compilation message (stderr)
grow.cpp: In function 'int main()':
grow.cpp:20:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | freopen((name + ".inp").c_str(), "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
grow.cpp:21:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
21 | freopen((name + ".out").c_str(), "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |