Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast", "unroll-loops")
- // #pragma GCC target("avx")
- #include <bits/stdc++.h>
- using namespace std;
- #define int int64_t
- #define double __float80
- using pii = pair<int, int>;
- template <typename T> using Prior = std::priority_queue<T>;
- template <typename T> using prior = std::priority_queue<T, vector<T>, greater<T>>;
- // #define X first
- // #define Y second
- #define eb emplace_back
- #define ef emplace_front
- #define ee emplace
- #define pb pop_back
- #define pf pop_front
- #define ALL(x) begin(x), end(x)
- #define RALL(x) rbegin(x), rend(x)
- #define SZ(x) ((int)(x).size())
- #define fastIO() ios_base::sync_with_stdio(0), cin.tie(0)
- template <typename T> void _do(T &&_t) {cerr << _t << "\n";}
- template <typename T, typename ...U> void _do(T &&_t, U &&..._u) {cerr << _t << ", ", _do(_u...);}
- template <typename T, typename U> bool chmin(T &lhs, U rhs) {return lhs > rhs ? lhs = rhs, 1 : 0;}
- template <typename T, typename U> bool chmax(T &lhs, U rhs) {return lhs < rhs ? lhs = rhs, 1 : 0;}
- const int maxc = 1 << 24;
- struct BIT {
- vector<int> bit;
- void init() {
- bit.assign(maxc, 0);
- }
- void add(int idx, int val) {
- if (idx == 0) return;
- while (idx < maxc) {
- bit[idx] += val;
- idx += idx & -idx;
- }
- }
- int sum(int idx, int ans = 0) {
- while (idx) {
- ans += bit[idx];
- idx -= idx & -idx;
- }
- return ans;
- }
- int query(int qL) {
- return sum(maxc-1) - sum(qL-1);
- }
- };
- void solve() {
- int N; cin >> N;
- BIT bit1, bit2; bit1.init(), bit2.init();
- vector<int> cnt(maxc, 0);
- for (int q = 1; q <= N; ++q) {
- string op; cin >> op;
- if (op == "B") {
- int idx; cin >> idx;
- bit1.add(cnt[idx], -1);
- bit2.add(cnt[idx], -cnt[idx]);
- ++cnt[idx];
- bit1.add(cnt[idx], 1);
- bit2.add(cnt[idx], cnt[idx]);
- }
- if (op == "C") {
- int idx; cin >> idx;
- if (!cnt[idx]) continue;
- bit1.add(cnt[idx], -1);
- bit2.add(cnt[idx], -cnt[idx]);
- --cnt[idx];
- bit1.add(cnt[idx], 1);
- bit2.add(cnt[idx], cnt[idx]);
- }
- if (op == "P") {
- int val; cin >> val;
- cout << bit1.query(val) << " " << bit2.query(val) << "\n";
- }
- }
- }
- int32_t main() {
- fastIO();
- int t = 1; // cin >> t;
- for (int _ = 1; _ <= t; ++_) {
- solve();
- }
- return 0;
- }
Advertisement
Advertisement