/ SeriousOJ /

Record Detail

Time Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 2ms 532.0 KiB
#3 Accepted 4ms 532.0 KiB
#4 Accepted 4ms 352.0 KiB
#5 Accepted 5ms 532.0 KiB
#6 Accepted 4ms 532.0 KiB
#7 Accepted 5ms 520.0 KiB
#8 Accepted 4ms 532.0 KiB
#9 Accepted 3ms 532.0 KiB
#10 Accepted 1ms 532.0 KiB
#11 Accepted 1ms 532.0 KiB
#12 Accepted 1ms 324.0 KiB
#13 Accepted 1ms 532.0 KiB
#14 Accepted 1ms 532.0 KiB
#15 Accepted 1ms 532.0 KiB
#16 Accepted 1ms 532.0 KiB
#17 Accepted 1ms 324.0 KiB
#18 Accepted 1ms 532.0 KiB
#19 Accepted 2ms 532.0 KiB
#20 Accepted 2ms 532.0 KiB
#21 Accepted 2ms 532.0 KiB
#22 Accepted 2ms 532.0 KiB
#23 Accepted 1ms 440.0 KiB
#24 Accepted 1ms 532.0 KiB
#25 Accepted 1ms 532.0 KiB
#26 Accepted 1ms 532.0 KiB
#27 Accepted 1ms 532.0 KiB
#28 Accepted 1ms 532.0 KiB
#29 Accepted 1ms 532.0 KiB
#30 Accepted 1ms 440.0 KiB
#31 Accepted 1ms 480.0 KiB
#32 Accepted 1ms 520.0 KiB
#33 Accepted 1ms 572.0 KiB
#34 Accepted 1ms 532.0 KiB
#35 Accepted 1ms 320.0 KiB
#36 Accepted 1ms 556.0 KiB
#37 Accepted 1ms 532.0 KiB
#38 Accepted 1ms 532.0 KiB
#39 Accepted 1ms 388.0 KiB
#40 Accepted 1ms 488.0 KiB
#41 Accepted 1ms 532.0 KiB
#42 Accepted 1ms 576.0 KiB
#43 Accepted 1ms 532.0 KiB
#44 Accepted 1ms 496.0 KiB
#45 Accepted 1ms 532.0 KiB
#46 Accepted 1ms 532.0 KiB
#47 Accepted 1ms 356.0 KiB
#48 Accepted 1ms 500.0 KiB
#49 Accepted 1ms 332.0 KiB
#50 Accepted 1ms 532.0 KiB
#51 Accepted 1ms 324.0 KiB
#52 Accepted 1ms 532.0 KiB
#53 Accepted 1ms 532.0 KiB
#54 Accepted 1ms 532.0 KiB
#55 Accepted 3ms 532.0 KiB
#56 Accepted 5ms 532.0 KiB
#57 Accepted 4ms 532.0 KiB
#58 Accepted 4ms 532.0 KiB
#59 Accepted 5ms 532.0 KiB
#60 Accepted 4ms 532.0 KiB
#61 Accepted 4ms 532.0 KiB
#62 Accepted 3ms 532.0 KiB
#63 Accepted 1ms 532.0 KiB
#64 Accepted 1ms 340.0 KiB
#65 Accepted 1ms 324.0 KiB
#66 Accepted 1ms 480.0 KiB
#67 Accepted 1ms 532.0 KiB
#68 Accepted 1ms 532.0 KiB
#69 Accepted 1ms 532.0 KiB
#70 Accepted 1ms 552.0 KiB
#71 Accepted 1ms 320.0 KiB
#72 Accepted 1ms 524.0 KiB
#73 Accepted 1ms 364.0 KiB
#74 Accepted 1ms 448.0 KiB
#75 Accepted 1ms 532.0 KiB
#76 Accepted 1ms 320.0 KiB
#77 Accepted 1ms 532.0 KiB
#78 Accepted 1ms 532.0 KiB
#79 Accepted 1ms 532.0 KiB
#80 Accepted 1ms 344.0 KiB
#81 Accepted 1ms 348.0 KiB
#82 Accepted 1ms 560.0 KiB
#83 Accepted 1ms 532.0 KiB
#84 Accepted 1ms 532.0 KiB
#85 Accepted 1ms 532.0 KiB
#86 Accepted 1ms 532.0 KiB
#87 Accepted 1ms 532.0 KiB
#88 Accepted 1ms 532.0 KiB
#89 Accepted 1ms 532.0 KiB
#90 Accepted 1ms 532.0 KiB
#91 Accepted 1ms 480.0 KiB
#92 Accepted 67ms 14.035 MiB
#93 Accepted 62ms 14.02 MiB
#94 Accepted 70ms 14.094 MiB
#95 Accepted 65ms 14.066 MiB
#96 Accepted 65ms 14.02 MiB
#97 Time Exceeded ≥2122ms ≥313.867 MiB
#98 Time Exceeded ≥2123ms ≥313.805 MiB

Code

#include <bits/stdc++.h>

// #ifndef ONLINE_JUDGE
// #include "template.cpp"
// #else
// #define debug(...)
// #define debugArr(...)
// #endif

#define F first
#define S second
#define int long long
#define double long double
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)x.size()
#define mp(x, y) make_pair(x, y)
#define lb lower_bound
#define ub upper_bound
#define ins insert
#define INF (int)1e9
using namespace std;

using pii = pair<int, int>;
using pdd = pair<double, double>;
using pbb = pair<bool, bool>;
using pcc = pair<char, char>;
using pss = pair<string, string>;
using vi = vector<int>;
using vd = vector<double>;
using vb = vector<bool>;
using vc = vector<char>;
using vs = vector<string>;
using vpii = vector<pair<int, int>>;
using vpdd = vector<pair<double, double>>;
using vpbb = vector<pair<bool, bool>>;
using vpcc = vector<pair<char, char>>;
using vpss = vector<pair<string, string>>;
using vvi = vector<vector<int>>;
using vvd = vector<vector<double>>;
using vvb = vector<vector<bool>>;
using vvc = vector<vector<char>>;
using vvs = vector<vector<string>>;
using vvpii = vector<vector<pair<int, int>>>;
using vvpdd = vector<vector<pair<double, double>>>;
using vvpbb = vector<vector<pair<bool, bool>>>;
using vvpcc = vector<vector<pair<char, char>>>;
using vvpss = vector<vector<pair<string, string>>>;

// clang-format off
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
template <class T> T sqrt_(T elem) {int l=1,r=elem;while(l<=r){int mid=l+(r-l)/2LL;if(mid>elem/mid){r=mid-1;}else{int val=mid*mid;if(val<=elem){l=mid+1;}else{r=mid-1;}}}return r;}
template <class T> T ceil_(T a,T b) {return(a+b-1)/b;};
template <class T> T mod_add(T a,T b,T mod){return((a%mod)+(b%mod))% mod;}
template <class T> T mod_sub(T a,T b,T mod){return((a%mod)-(b%mod)+mod)%mod;}
template <class T> T mod_mul(T a,T b,T mod){return((a%mod)*(b%mod))%mod;}
template <class T> T mod_inv(T a,T mod){T m0=mod,y=0,x=1;if(mod==1)return 0;while(a>1){T q=a/mod;T t=mod;mod=a%mod,a=t;t=y;y=x-q*y;x=t;}if(x<0)x+=m0;return x;}
template <class T> T mod_div(T a,T b,T mod){return mod_mul(a,mod_inv(b,mod),mod);}
// clang-format on
void solve() {
  int n, k;
  cin >> n >> k;

  vi a(n + 1);

  vector<tuple<int, int, int>> b(k);

  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }

  for (auto &[x, y, z] : b) {
    cin >> x >> y >> z;
  }

  int m = __lg(n);

  vvpii seg(m + 4);
  map<tuple<int, int, int>, vector<tuple<int, int, int>>> adj;
  map<tuple<int, int, int>, tuple<int, int, int>> par;
  vi initLvl(n + 1);

  queue<tuple<int, int, int>> q;
  q.push({1, 1, n});
  par[{1, 1, n}] = {-1, -1, -1};
  // lvl, left, right;

  while (!q.empty()) {
    auto [lvl, l, r] = q.front();
    seg[lvl].eb(l, r);
    q.pop();

    int l1 = l, r1 = l + (((r - l + 1) / 2) - 1);
    int l2 = r1 + 1, r2 = r;

    if (r - l <= 0) {
      initLvl[r] = lvl;
      continue;
    }

    adj[{lvl, l, r}].push_back({lvl + 1, l1, r1});
    adj[{lvl, l, r}].push_back({lvl + 1, l2, r2});

    par[{lvl + 1, l1, r1}] = {lvl, l, r};
    par[{lvl + 1, l2, r2}] = {lvl, l, r};

    q.push({lvl + 1, l1, r1});
    q.push({lvl + 1, l2, r2});
  }

  vector<vvi> dp(n + 1, vvi(m + 4, vi(2)));
  int lastLvl = *max_element(all(initLvl));

  for (int i = lastLvl; i >= 1; i--) {
    for (const auto [x, y] : seg[i]) {
      if (!adj.count({i, x, y})) {
        dp[x][i][0] = dp[x][i][1] = a[x];
      } else {
        int u = 0, v = INF;
        for (const auto [lvl1, l1, r1] : adj[{i, x, y}]) {
          u = max(u, dp[l1][lvl1][1]);
          v = min(v, dp[l1][lvl1][0]);
        }
        dp[x][i][0] = u, dp[x][i][1] = v;
      }
    }
  }

  for (const auto [ind, val, p] : b) {
    a[ind] = val;
    dp[ind][initLvl[ind]][0] = dp[ind][initLvl[ind]][1] = a[ind];
    int currLvl = initLvl[ind], currL = ind, currR = ind;
    while (true) {
      auto [lvl, l, r] = par[{currLvl, currL, currR}];
      // debug(lvl, l, r, currLvl, currL, currR);
      if (l == -1) {
        break;
      }
      int u = 0, v = INF;
      for (const auto [lvl1, l1, r1] : adj[{lvl, l, r}]) {
        u = max(u, dp[l1][lvl1][1]);
        v = min(v, dp[l1][lvl1][0]);
      }

      dp[l][lvl][0] = u, dp[l][lvl][1] = v;
      currLvl = lvl, currL = l, currR = r;
    }
    cout << dp[1][1][!p] << '\n';
  }
  return;
}

signed main() {

  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int tt = 1, count = 1;
  // cin >> tt;
  while (tt--) {
    // cout << "Case #" << count << ": ";
    solve();
    ++count;
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1169 Thakur vs Roy again
Language
C++17 (G++ 13.2.0)
Submit At
2025-04-07 13:37:04
Judged At
2025-04-07 13:37:04
Judged By
Score
96
Total Time
≥2123ms
Peak Memory
≥313.867 MiB