Advertisement
pb_jiang

CF1860C

Jul 3rd, 2024
699
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. // Problem: C. Game on Permutation
  2. // Contest: Codeforces - Educational Codeforces Round 153 (Rated for Div. 2)
  3. // URL: https://codeforces.com/problemset/problem/1860/C
  4. // Memory Limit: 256 MB
  5. // Time Limit: 2000 ms
  6. //
  7. // Powered by CP Editor (https://cpeditor.org)
  8.  
  9. #include <assert.h>
  10. #include <bits/stdc++.h>
  11. using namespace std;
  12. #ifndef __DEBUG__
  13. #define dbg(...) 42
  14. #endif
  15. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  16.  
  17. using ll = long long;
  18. using pii = pair<int, int>;
  19. using pll = pair<ll, ll>;
  20. using vl = vector<ll>;
  21. using vi = vector<int>;
  22.  
  23. void solve1()
  24. {
  25.     ll n, ans = 0;
  26.     cin >> n;
  27.     vl p(n), cnt(n);
  28.     for (auto &x : p)
  29.         cin >> x;
  30.     map<ll, ll> m;
  31.     m[1e9 + 3] = 0;
  32.  
  33.     for (ll i = 0; i < n; ++i) {
  34.         auto it = m.upper_bound(p[i]);
  35.         if (it == m.begin()) {
  36.             m[p[i]] = 0;
  37.         } else {
  38.             it = prev(it);
  39.             m[p[i]] = it->second + 1;
  40.             if (it->second == 0)
  41.                 ans++;
  42.         }
  43.     }
  44.     cout << ans << endl;
  45. }
  46. void solve2()
  47. {
  48.     ll n, ans = 0;
  49.     cin >> n;
  50.     vl p(n), cnt(n);
  51.     for (auto &x : p)
  52.         cin >> x;
  53.     map<ll, ll> m;
  54.     m[1e9 + 3] = 0;
  55.     stack<ll> st;
  56.     st.push(1e9 + 3);
  57.  
  58.     for (ll i = 0; i < n; ++i) {
  59.         auto it = m.upper_bound(p[i]);
  60.         if (it == m.begin()) {
  61.             m[p[i]] = 0;
  62.         } else {
  63.             it = prev(it);
  64.             m[p[i]] = it->second + 1;
  65.             if (it->second == 0 && st.top() > p[i]) {
  66.                 ans++;
  67.                 st.push(p[i]);
  68.             }
  69.         }
  70.     }
  71.     cout << ans << endl;
  72. }
  73.  
  74. void solve_editorial()
  75. {
  76.     int n;
  77.     cin >> n;
  78.     int ans = 0;
  79.     int mn = n + 1, mnWin = n + 1;
  80.     while (n--) {
  81.         int x;
  82.         cin >> x;
  83.         if (mn < x && x < mnWin) {
  84.             ans += 1;
  85.             mnWin = x;
  86.         }
  87.         mn = min(mn, x);
  88.     }
  89.     cout << ans << '\n';
  90. }
  91.  
  92. void solve()
  93. {
  94.     ll n, ans = 0;
  95.     cin >> n;
  96.     vl p(n), possible;
  97.     for (auto &x : p)
  98.         cin >> x;
  99.     map<ll, ll> m;
  100.     m[1e9 + 3] = 0;
  101.     for (ll i = 0; i < n; ++i) {
  102.         auto it = m.upper_bound(p[i]);
  103.         if (it == m.begin()) {
  104.             m[p[i]] = 0;
  105.         } else {
  106.             it = prev(it);
  107.             m[p[i]] = it->second + 1;
  108.             if (it->second == 0)
  109.                 possible.push_back(i);
  110.         }
  111.     }
  112.     set<ll> s;
  113.     for (ll i = n - 1, j = possible.size() - 1; i >= 0; --i) {
  114.         while (j >= 0 && possible[j] >= i) {
  115.             ll v = p[possible[j]];
  116.             if (s.upper_bound(v) != s.end())
  117.                 ++ans;
  118.             --j;
  119.         }
  120.         s.insert(p[i]);
  121.     }
  122.     cout << ans << endl;
  123. }
  124.  
  125. int main(int argc, char **argv)
  126. {
  127.     ll t;
  128.     cin >> t;
  129.     while (t--) {
  130.         solve2();
  131.         // solve_editorial();
  132.     }
  133.     return 0;
  134. };
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement