Submission #70836694


Source Code Expand

#include <bits/stdc++.h>

using namespace std;
template <typename T>
using vc = vector<T>;
using ll = long long;

using PQ_max = priority_queue<int>;
using PQ_min = priority_queue<int, vector<int>, greater<int>>;

template <typename PQ>
struct Removable_Queue {
  PQ que, rm_que;
  int cnt = 0;
  ll sum = 0;

  bool empty() { return cnt == 0; }
  int top() {
    normalize();
    return que.top();
  }

  void push(int x) {
    que.push(x);
    cnt += 1, sum += x;
  }
  void pop(int x) {
    rm_que.push(x);
    cnt -= 1, sum -= x;
  }
  void pop() {
    normalize();
    cnt -= 1, sum -= que.top();
    que.pop();
  }

 private:
  void normalize() {
    while (!rm_que.empty() && rm_que.top() == que.top()) {
      rm_que.pop(), que.pop();
    }
  }
};

// total time complexity: sum((Q + sum_i |K_i-K_{i+1}|)log Q)
struct PartitionSum {
  Removable_Queue<PQ_max> que_l;
  Removable_Queue<PQ_min> que_r;
  void insert(int x) {
    if (que_l.empty() || que_l.top() < x) {
      que_r.push(x);
    } else {
      que_l.push(x);
    }
  }
  void erase(int x) {
    if (que_l.empty() || que_l.top() < x) {
      que_r.pop(x);
    } else {
      que_l.pop(x);
    }
  }
  pair<ll, ll> get_sum(int K) {
    assert(0 <= K && K <= que_l.cnt + que_r.cnt);
    while (que_l.cnt < K) {
      que_l.push(que_r.top()), que_r.pop();
    }
    while (que_l.cnt > K) {
      que_r.push(que_l.top()), que_l.pop();
    }
    return {que_l.sum, que_r.sum};
  }
};

void solve() {
  int N, M, Q;
  cin >> N >> M >> Q;
  vc<int> A(N + M), I(Q), X(Q);
  for (int i = 0; i < N + M; ++i) cin >> A[i];

  PartitionSum S1, S2;
  for (int x : A) S1.insert(x), S2.insert(x);

  for (int q = 0; q < Q; ++q) {
    int t, i, x;
    cin >> t >> i >> x;
    i = (t == 1 ? i - 1 : i - 1 + N);
    S1.erase(A[i]), S2.erase(A[i]);
    A[i] = x;
    S1.insert(A[i]), S2.insert(A[i]);
    auto [a, b] = S1.get_sum(N / 2);
    auto [c, d] = S2.get_sum(N / 2 + M);
    assert(a + b == c + d);
    ll ans = a + d;
    cout << ans << "\n";
  }
}

signed main() {
  std::cin.tie(nullptr);
  std::ios::sync_with_stdio(false);

  solve();
}

Submission Info

Submission Time
Task B - Remove Median Operations
User maspy
Language C++23 (GCC 15.2.0)
Score 600
Code Size 2203 Byte
Status AC
Exec Time 159 ms
Memory 16156 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 63
Set Name Test Cases
Sample 01_sample_01.txt, 01_sample_02.txt
All 01_sample_01.txt, 01_sample_02.txt, 02_rand1_01.txt, 02_rand1_02.txt, 02_rand1_03.txt, 02_rand1_04.txt, 02_rand1_05.txt, 02_rand1_06.txt, 02_rand1_07.txt, 02_rand1_08.txt, 02_rand1_09.txt, 02_rand1_10.txt, 02_rand1_11.txt, 02_rand1_12.txt, 02_rand1_13.txt, 02_rand1_14.txt, 02_rand1_15.txt, 02_rand1_16.txt, 02_rand1_17.txt, 02_rand1_18.txt, 02_rand1_19.txt, 02_rand1_20.txt, 02_rand1_21.txt, 03_rand2_01.txt, 03_rand2_02.txt, 03_rand2_03.txt, 03_rand2_04.txt, 03_rand2_05.txt, 03_rand2_06.txt, 03_rand2_07.txt, 03_rand2_08.txt, 03_rand2_09.txt, 03_rand2_10.txt, 03_rand2_11.txt, 03_rand2_12.txt, 03_rand2_13.txt, 03_rand2_14.txt, 03_rand2_15.txt, 03_rand2_16.txt, 04_query_small_01.txt, 04_query_small_02.txt, 04_query_small_03.txt, 04_query_small_04.txt, 04_query_small_05.txt, 04_query_small_06.txt, 04_query_small_07.txt, 04_query_small_08.txt, 04_query_small_09.txt, 04_query_small_10.txt, 04_query_small_11.txt, 04_query_small_12.txt, 05_query_large_01.txt, 05_query_large_02.txt, 05_query_large_03.txt, 05_query_large_04.txt, 05_query_large_05.txt, 05_query_large_06.txt, 05_query_large_07.txt, 05_query_large_08.txt, 05_query_large_09.txt, 05_query_large_10.txt, 05_query_large_11.txt, 05_query_large_12.txt
Case Name Status Exec Time Memory
01_sample_01.txt AC 1 ms 3672 KiB
01_sample_02.txt AC 1 ms 3712 KiB
02_rand1_01.txt AC 74 ms 6368 KiB
02_rand1_02.txt AC 77 ms 6288 KiB
02_rand1_03.txt AC 81 ms 6200 KiB
02_rand1_04.txt AC 69 ms 8380 KiB
02_rand1_05.txt AC 70 ms 7944 KiB
02_rand1_06.txt AC 81 ms 12608 KiB
02_rand1_07.txt AC 82 ms 12552 KiB
02_rand1_08.txt AC 81 ms 12644 KiB
02_rand1_09.txt AC 82 ms 12252 KiB
02_rand1_10.txt AC 83 ms 12196 KiB
02_rand1_11.txt AC 112 ms 14208 KiB
02_rand1_12.txt AC 119 ms 14552 KiB
02_rand1_13.txt AC 89 ms 11572 KiB
02_rand1_14.txt AC 89 ms 10652 KiB
02_rand1_15.txt AC 97 ms 12532 KiB
02_rand1_16.txt AC 79 ms 10604 KiB
02_rand1_17.txt AC 138 ms 15628 KiB
02_rand1_18.txt AC 139 ms 15632 KiB
02_rand1_19.txt AC 138 ms 16156 KiB
02_rand1_20.txt AC 138 ms 15624 KiB
02_rand1_21.txt AC 137 ms 16140 KiB
03_rand2_01.txt AC 78 ms 12256 KiB
03_rand2_02.txt AC 78 ms 12084 KiB
03_rand2_03.txt AC 77 ms 11888 KiB
03_rand2_04.txt AC 79 ms 12276 KiB
03_rand2_05.txt AC 79 ms 11952 KiB
03_rand2_06.txt AC 100 ms 14064 KiB
03_rand2_07.txt AC 76 ms 9700 KiB
03_rand2_08.txt AC 82 ms 11652 KiB
03_rand2_09.txt AC 82 ms 11196 KiB
03_rand2_10.txt AC 99 ms 11820 KiB
03_rand2_11.txt AC 76 ms 8784 KiB
03_rand2_12.txt AC 120 ms 15388 KiB
03_rand2_13.txt AC 121 ms 15388 KiB
03_rand2_14.txt AC 121 ms 15636 KiB
03_rand2_15.txt AC 119 ms 15376 KiB
03_rand2_16.txt AC 120 ms 15384 KiB
04_query_small_01.txt AC 74 ms 12528 KiB
04_query_small_02.txt AC 75 ms 12652 KiB
04_query_small_03.txt AC 76 ms 12652 KiB
04_query_small_04.txt AC 75 ms 12584 KiB
04_query_small_05.txt AC 77 ms 12540 KiB
04_query_small_06.txt AC 112 ms 14012 KiB
04_query_small_07.txt AC 100 ms 11004 KiB
04_query_small_08.txt AC 103 ms 12924 KiB
04_query_small_09.txt AC 82 ms 11972 KiB
04_query_small_10.txt AC 103 ms 11904 KiB
04_query_small_11.txt AC 89 ms 12176 KiB
04_query_small_12.txt AC 140 ms 15372 KiB
05_query_large_01.txt AC 81 ms 12588 KiB
05_query_large_02.txt AC 96 ms 12560 KiB
05_query_large_03.txt AC 80 ms 12568 KiB
05_query_large_04.txt AC 82 ms 12524 KiB
05_query_large_05.txt AC 82 ms 12156 KiB
05_query_large_06.txt AC 123 ms 13984 KiB
05_query_large_07.txt AC 97 ms 10784 KiB
05_query_large_08.txt AC 99 ms 11012 KiB
05_query_large_09.txt AC 101 ms 10280 KiB
05_query_large_10.txt AC 130 ms 13304 KiB
05_query_large_11.txt AC 104 ms 12696 KiB
05_query_large_12.txt AC 159 ms 15632 KiB