Submission #1255903

#TimeUsernameProblemLanguageResultExecution timeMemory
1255903ssitaramtrapezoid (balkan11_trapezoid)C++20
100 / 100
77 ms6588 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int MOD = 30013; struct trap { int a, b, c, d; }; struct segtree { int n; vector<pair<int, int>> here; segtree(int sz) { n = 1; while (n < sz) n *= 2; here.resize(2 * n - 1); } pair<int, int> comb(pair<int, int>& a, pair<int, int>& b) { if (a.first < b.first) return b; if (a.first > b.first) return a; return {a.first, (a.second + b.second) % MOD}; } void upd(int node, int l, int r, int u, pair<int, int>& p) { if (r == l + 1) { here[node] = p; return; } int m = (l + r) / 2; if (u < m) upd(node * 2 + 1, l, m, u, p); else upd(node * 2 + 2, m, r, u, p); here[node] = comb(here[node * 2 + 1], here[node * 2 + 2]); } void upd(int u, pair<int, int>& p) { upd(0, 0, n, u, p); } pair<int, int> over(int node, int l, int r, int u) { if (r <= u) return here[node]; if (l >= u) return {0, 0}; int m = (l + r) / 2; pair<int, int> one = over(node * 2 + 1, l, m, u); pair<int, int> two = over(node * 2 + 2, m, r, u); return comb(one, two); } pair<int, int> over(int u) { return over(0, 0, n, u); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> to(n); vector<trap> v(n); vector<pair<int, int>> order; for (int i = 0; i < n; ++i) { cin >> v[i].a >> v[i].b >> v[i].c >> v[i].d; to[i] = v[i].b; order.push_back({v[i].c, i}); order.push_back({v[i].d, i}); } vector<pair<int, int>> ans(n); sort(to.begin(), to.end()); sort(order.begin(), order.end()); segtree st(n); for (pair<int, int>& i : order) { if (v[i.second].d == i.first) { st.upd(lower_bound(to.begin(), to.end(), v[i.second].b) - to.begin(), ans[i.second]); } else { ans[i.second] = st.over(lower_bound(to.begin(), to.end(), v[i.second].a) - to.begin()); if (++ans[i.second].first == 1) ans[i.second].second = 1; } } pair<int, int> res = st.over(n); cout << res.first << ' ' << res.second << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...