Submission #575924

#TimeUsernameProblemLanguageResultExecution timeMemory
575924piOOERoads (CEOI20_roads)C++17
100 / 100
153 ms9752 KiB
#include <bits/stdc++.h> using namespace std; #define sz(x) ((int)size(x)) #define all(x) begin(x), end(x) #define trace(x) cout << #x << ": " << (x) << endl; typedef long long ll; typedef double db; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l, int r) { return (int) ((ll) rnd() % (r - l + 1)) + l; } const int N = 100002, infI = 1e9 + 7; int X[N][2], Y[N][2]; pair<int, int> R[N]; int x_now = -infI; db get(int i) { if (x_now == X[i][0]) { return Y[i][0]; } db k = (Y[i][0] - Y[i][1]) / (db) (X[i][0] - X[i][1]); db b = Y[i][0] - X[i][0] * k; return k * x_now + b; } auto comp = [](int i, int j) { return get(i) < get(j); }; set<int, decltype(comp)> st(comp); int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<tuple<int, int, int, int>> qu; for (int i = 0; i < n; ++i) { cin >> X[i][0] >> Y[i][0] >> X[i][1] >> Y[i][1]; if (X[i][0] > X[i][1] || (X[i][0] == X[i][1] && Y[i][0] > Y[i][1])) { swap(X[i][0], X[i][1]); swap(Y[i][0], Y[i][1]); } qu.emplace_back(X[i][0], Y[i][0], 0, i); qu.emplace_back(X[i][1], Y[i][1], 1, i); } fill(all(R), make_pair(-infI, -infI)); sort(all(qu)); X[n][0] = -infI, Y[n][0] = -infI; X[n][1] = infI, Y[n][1] = -infI; X[n + 1][0] = -infI, Y[n + 1][0] = infI; X[n + 1][1] = infI, Y[n + 1][1] = infI; st.insert(n); st.insert(n + 1); for (auto [x, y, tt, i]: qu) { x_now = x; if (tt == 0) { auto it = st.insert(i).first; pair<int, int> now = R[*prev(it)]; R[*prev(it)] = R[i] = {X[i][0], Y[i][0]}; if (now.first != -infI) { cout << now.first << " " << now.second << " " << X[i][0] << " " << Y[i][0] << '\n'; } } else { auto it = st.find(i); R[*prev(it)] = {X[i][1], Y[i][1]}; st.erase(i); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...