/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 540.0 KiB
#3 Accepted 1ms 540.0 KiB
#4 Accepted 1ms 320.0 KiB
#5 Accepted 1ms 532.0 KiB
#6 Accepted 1ms 320.0 KiB
#7 Accepted 1ms 520.0 KiB
#8 Accepted 1ms 324.0 KiB
#9 Accepted 1ms 352.0 KiB
#10 Accepted 1ms 532.0 KiB
#11 Accepted 1ms 532.0 KiB
#12 Accepted 1ms 532.0 KiB
#13 Accepted 1ms 360.0 KiB
#14 Accepted 1ms 564.0 KiB
#15 Accepted 1ms 348.0 KiB
#16 Accepted 1ms 540.0 KiB
#17 Accepted 1ms 532.0 KiB
#18 Accepted 2ms 532.0 KiB
#19 Accepted 2ms 536.0 KiB
#20 Accepted 2ms 532.0 KiB
#21 Accepted 5ms 532.0 KiB
#22 Accepted 4ms 324.0 KiB
#23 Accepted 4ms 532.0 KiB
#24 Accepted 2ms 764.0 KiB
#25 Accepted 1ms 532.0 KiB
#26 Accepted 1ms 532.0 KiB
#27 Accepted 1ms 324.0 KiB
#28 Accepted 1ms 516.0 KiB
#29 Accepted 1ms 324.0 KiB
#30 Accepted 1ms 320.0 KiB
#31 Accepted 1ms 348.0 KiB
#32 Accepted 1ms 532.0 KiB
#33 Accepted 1ms 536.0 KiB
#34 Accepted 1ms 532.0 KiB
#35 Accepted 1ms 532.0 KiB
#36 Accepted 1ms 536.0 KiB
#37 Accepted 1ms 324.0 KiB
#38 Accepted 1ms 512.0 KiB
#39 Accepted 1ms 764.0 KiB
#40 Accepted 1ms 516.0 KiB
#41 Accepted 1ms 496.0 KiB
#42 Accepted 1ms 532.0 KiB
#43 Accepted 1ms 500.0 KiB
#44 Accepted 1ms 532.0 KiB
#45 Accepted 1ms 532.0 KiB
#46 Accepted 1ms 532.0 KiB
#47 Accepted 1ms 532.0 KiB
#48 Accepted 1ms 532.0 KiB
#49 Accepted 1ms 520.0 KiB
#50 Accepted 1ms 532.0 KiB
#51 Accepted 1ms 484.0 KiB
#52 Accepted 1ms 532.0 KiB
#53 Accepted 1ms 532.0 KiB
#54 Accepted 1ms 532.0 KiB
#55 Accepted 1ms 532.0 KiB
#56 Accepted 1ms 532.0 KiB
#57 Accepted 1ms 320.0 KiB
#58 Accepted 1ms 532.0 KiB
#59 Accepted 1ms 440.0 KiB
#60 Accepted 1ms 324.0 KiB
#61 Accepted 1ms 396.0 KiB
#62 Accepted 1ms 380.0 KiB
#63 Accepted 1ms 532.0 KiB
#64 Accepted 1ms 532.0 KiB
#65 Accepted 1ms 532.0 KiB
#66 Accepted 1ms 340.0 KiB
#67 Accepted 1ms 536.0 KiB
#68 Accepted 1ms 532.0 KiB
#69 Accepted 1ms 532.0 KiB
#70 Accepted 1ms 532.0 KiB
#71 Accepted 1ms 436.0 KiB
#72 Accepted 1ms 324.0 KiB
#73 Accepted 1ms 320.0 KiB
#74 Accepted 1ms 320.0 KiB
#75 Accepted 1ms 532.0 KiB
#76 Accepted 1ms 532.0 KiB
#77 Accepted 1ms 524.0 KiB
#78 Accepted 1ms 376.0 KiB
#79 Accepted 1ms 532.0 KiB
#80 Accepted 1ms 396.0 KiB
#81 Accepted 105ms 1.742 MiB
#82 Accepted 84ms 1.77 MiB
#83 Accepted 82ms 1.77 MiB
#84 Accepted 106ms 1.773 MiB
#85 Accepted 84ms 1.77 MiB
#86 Accepted 108ms 1.77 MiB
#87 Accepted 111ms 1.77 MiB
#88 Accepted 81ms 1.77 MiB
#89 Accepted 105ms 1.762 MiB
#90 Accepted 108ms 1.77 MiB
#91 Accepted 104ms 12.613 MiB
#92 Accepted 114ms 12.562 MiB
#93 Accepted 135ms 12.719 MiB
#94 Accepted 86ms 12.77 MiB
#95 Accepted 54ms 12.617 MiB
#96 Accepted 107ms 12.613 MiB
#97 Accepted 133ms 12.727 MiB
#98 Accepted 64ms 12.609 MiB
#99 Accepted 62ms 12.566 MiB
#100 Accepted 83ms 12.77 MiB

Code

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using dt = array<int, 2>;

template<typename T> struct SegmentTree {
  vector<T> st;
  vector<T>& a;
  T defaultValue = 0; 
  SegmentTree(vector<T>& arr) : a(arr) {
    st.resize(4 * arr.size());
    build(1, 0, arr.size() - 1);
  }
  T combine(T x, T y) {
    return max(x, y);
  }
  void build(int u, int s, int e) {
    if (s == e) {
      st[u] = a[s];
      return;
    }
    int v = 2 * u, w = (2 * u) + 1, m = (s + e) / 2;
    build(v, s, m);
    build(w, m + 1, e);
    st[u] = combine(st[v], st[w]);
  }
  T _query(int l, int r, int u, int s, int e) {
    if (e < l || r < s) return defaultValue;
    if (l <= s && e <= r) return st[u];
    int v = 2 * u, w = (2 * u) + 1, m = (s + e) / 2;
    T lc = _query(l, r, v, s, m);
    T rc = _query(l, r, w, m + 1, e);
    return combine( lc, rc);
  }
  void _update(int idx, T newV, int u, int s, int e) {
    if (s == e) {
      st[u] = a[s] = max(a[s], newV);
      return;
    }
    int v = 2 * u, w = (2 * u) + 1, m = (s + e) / 2;
    if (idx <= m) _update(idx, newV, v, s, m);
    else _update(idx, newV, w, m + 1, e);
    st[u] = combine(st[v], st[w]);
  }
  T query(int l, int r) {
    return _query(l, r, 1, 0, (int)a.size() - 1);
  }
  void update(int idx, T newV) {
    _update(idx, newV, 1, 0, (int)a.size() - 1);
  }
  // query(l, r);
  // update(idx, newV);
};


void test() {
  int n;
  cin >> n;

  vector<ll> a(n), b(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i]--;
  }
  for (int i = 0; i < n; i++) {
    cin >> b[i];
  }

  ll mx = 0;
  vector<ll> v(n);
  SegmentTree<ll> seg(v);
  vector<ll> dp(n);
  for (int i = n - 1; i >= 0; i--) {
    dp[i] = b[i];
    if (a[i] + 1 < n) dp[i] += seg.query(a[i] + 1, n - 1);
    seg.update(a[i], dp[i]);
    mx = max(mx, dp[i]);
  }

  for (int i = n - 1; i >= 0; i--) {
    if (dp[i] == mx) {
        cout << n - i << "\n";
        return;
    }
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int T = 1;  
  cin >> T;
  for (int i = 1; i <= T; i++) {
    test();
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1224 Maximize the max
Language
C++17 (G++ 13.2.0)
Submit At
2025-09-03 20:31:05
Judged At
2025-09-03 20:31:05
Judged By
Score
100
Total Time
135ms
Peak Memory
12.77 MiB