Submission #832838

#TimeUsernameProblemLanguageResultExecution timeMemory
832838mat_jurtrapezoid (balkan11_trapezoid)C++17
2 / 100
142 ms17960 KiB
#include <bits/stdc++.h> using namespace std; #ifdef DEBUG auto&operator<<(auto &o, pair<auto, auto> p) {o << "(" << p.first << "," << p.second << ")"; return o;} auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";for(auto e:x)o<< e << ", ";return o<<"}";} #define debug(X) cerr << "["#X"]:" << X << '\n'; #else #define debug(X) ; #endif #define ll long long #define trapez tuple<int, int, int, int, int> int main () { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("trapezoid.in", "r", stdin); // freopen("trapezoid.out", "w", stdout); int n; cin >> n; vector<tuple<int, int, int, int, int>> v; map<int, int> M; for (int i = 0; i < n; i++) { int a, b, c, d; cin >> a >> b >> c >> d; v.emplace_back(make_tuple(a, b, c, d, i)); M[c]; M[d]; } M[0]; int x = 0; for (auto &e : M) { e.second = x++; } x--; sort(v.begin(), v.end()); auto cmp = [&](trapez a, trapez b) {return get<1>(a) < get<1>(b);}; priority_queue<trapez, vector<trapez>, decltype(cmp)> Q(cmp); vector<int> dp(n); int res = 0; int base = 1; while (base < x) base *= 2; vector<int> tree(2*base); auto update = [&](int v, int x) { v += base; while (v > 0) { tree[v] = max(tree[v], x); v /= 2; } }; auto query = [&](int a, int b) { a += base-1; b += base+1; int res = 0; while (a/2 != b/2) { if (a%2 == 0) res = max(res, tree[a+1]); if (b%2 == 1) res = max(res, tree[b-1]); a /= 2; b /= 2; } return res; }; for (auto &[a, b, c, d, idx] : v) { while (!Q.empty() && get<1>(Q.top()) < a) { update(M[get<3>(Q.top())], dp[get<4>(Q.top())]); Q.pop(); } dp[idx] = query(0, M[c])+1; res = max(res, dp[idx]); Q.push(make_tuple(a, b, c, d, idx)); } cout << res << ' ' << 1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...