Submission #1204754

#TimeUsernameProblemLanguageResultExecution timeMemory
1204754byunjaewooRoads (CEOI20_roads)C++20
15 / 100
40 ms5820 KiB
#include <bits/stdc++.h>
#define int long long
#define ld long double
using namespace std;

const int N=100010, INF=1e7;
int n;
struct line {
    int k;
    array<int, 2> s, e;
    ld gety(int x) const {
        if(s[0]==e[0]) return s[1];
        return (ld)(s[1]*(e[0]-x)+e[1]*(x-s[0]))/(ld)(e[0]-s[0]);
    }
    bool operator<(const line &r) const {
        return (*this).gety(max(s[0], r.s[0]))<r.gety(max(s[0], r.s[0]));
    }
}a[N];
set<line> st;
array<int, 2> nxt[N];
vector<array<int, 4>> vec;

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>a[i].s[0]>>a[i].s[1]>>a[i].e[0]>>a[i].e[1], a[i].k=i;
        if(a[i].s>a[i].e) swap(a[i].s, a[i].e);
        vec.push_back({a[i].s[0], a[i].s[1], i, true});
        vec.push_back({a[i].e[0], a[i].e[1], i, false});
    }
    sort(vec.begin(), vec.end());
    st.insert({0, {-INF, -INF}, {INF, -INF}}), st.insert(a[vec[0][2]]);
    nxt[0]=nxt[vec[0][2]]=a[vec[0][2]].s;
    if(a[vec[0][2]].s[0]==a[vec[0][2]].e[0]) nxt[0]=nxt[vec[0][2]]=a[vec[0][2]].e;
    for(auto [x, y, k, f]:vec) {
        if(k==vec[0][2] && f) continue;
        if(f) {
            st.insert(a[k]);
            auto p=prev(st.find(a[k]));
            cout<<x<<" "<<y<<" "<<nxt[a[p->k].k][0]<<" "<<nxt[a[p->k].k][1]<<"\n";
            if(a[k].s[0]==a[k].e[0]) nxt[k]=a[k].e;
            else nxt[k]=a[k].s;
        }
        else {
            auto p=prev(st.find(a[k]));
            nxt[a[p->k].k]=a[k].e;
            st.erase(a[k]);
        }
    }
    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...