Submission #832864

#TimeUsernameProblemLanguageResultExecution timeMemory
832864mat_jurtrapezoid (balkan11_trapezoid)C++14
5 / 100
123 ms20660 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<pair<int, int>> dp(n); pair<int, int> res = {0, 0}; int base = 1; while (base < x) base *= 2; vector<pair<int, int>> tree(2*base); auto merge = [&](pair<int, int> a, pair<int, int> b) { if (a.first == b.first) return make_pair(a.first, b.second+a.second); if (a.first > b.first) return a; else return b; }; auto update = [&](int v, pair<int, int> x) { v += base; while (v > 0) { tree[v] = merge(tree[v], x); v /= 2; } }; auto query = [&](int a, int b) { a += base-1; b += base+1; pair<int, int> res = {0, 0}; while (a/2 != b/2) { if (a%2 == 0) res = merge(res, tree[a+1]); if (b%2 == 1) res = merge(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]); dp[idx].first++; if (dp[idx].first == 1) dp[idx].second = 1; res = merge(res, dp[idx]); Q.push(make_tuple(a, b, c, d, idx)); } cout << res.first << ' ' << res.second << '\n'; return 0; }

Compilation message (stderr)

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:68:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   68 |  for (auto &[a, b, c, d, idx] : v) {
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...