제출 #1218685

#제출 시각아이디문제언어결과실행 시간메모리
1218685JooDdaeRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
178 ms20520 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int p[400400]; int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); } int merge(int x, int y) { if((x = find(x)) == (y = find(y))) return 0; p[x] = y; return 1; } ll plan_roller_coaster(vector<int> s, vector<int> t) { s.push_back(1e9), t.push_back(1); int n = s.size(); vector<int> V; for(int i=0;i<n;i++) V.push_back(s[i]), V.push_back(t[i]); sort(V.begin(), V.end()); V.erase(unique(V.begin(), V.end()), V.end()); for(int i=0;i<n;i++) s[i] = lower_bound(V.begin(), V.end(), s[i]) - V.begin() + 1; for(int i=0;i<n;i++) t[i] = lower_bound(V.begin(), V.end(), t[i]) - V.begin() + 1; vector<array<int, 3>> e; int m = V.size(); vector<int> S(m+1, 0); for(int i=0;i<n;i++) S[s[i]]++, S[t[i]]--, e.push_back({0, s[i], t[i]}); ll ans = 0; for(int i=1;i<m;i++) { S[i] += S[i-1]; if(S[i] > 0) ans += (V[i]-V[i-1]) * S[i]; e.push_back({S[i] ? 0 : 2*(V[i]-V[i-1]), i, i+1}); } iota(p+1, p+1+m, 1); sort(e.begin(), e.end()); for(auto [z, x, y] : e) if(merge(x, y)) ans += z; return ans; }

컴파일 시 표준 에러 (stderr) 메시지

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...