제출 #1283517

#제출 시각아이디문제언어결과실행 시간메모리
1283517stanwaibbangeRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
106 ms7672 KiB
#include "railroad.h" #include <bits/stdc++.h> using namespace std; const int INF = 1'000'000'001; // int main() { // int n; // assert(1 == scanf("%d", &n)); // std::vector<int> s(n), t(n); // for (int i = 0; i < n; ++i) // assert(2 == scanf("%d%d", &s[i], &t[i])); // long long ans = plan_roller_coaster(s, t); // printf("%lld\n", ans); // return 0; // } void build(int n, vector<int> &in, int &len, vector<int> &seg) { len = 2 << __lg(n); seg.resize(2*len,INF); for (int i{0};i<n;i++) { seg[len+i] = in[i]; } for (int i{len-1};i>=1;i--) { seg[i] = min(seg[2*i],seg[2*i+1]); } } void update(int &len, vector<int> &seg,int i, int v) { i += len; seg[i] = v; for (i/=2;i>=1;i/=2) { seg[i] = min(seg[2*i],seg[2*i+1]); } } int fmin(int &len, vector<int> &seg) { int i = 1; while (i < len) { if (seg[2*i] < seg[2*i + 1]) { i = 2*i; } else { i = 2*i + 1; } } return i - len; } long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) { int n = (int) s.size()+1; s.push_back(INF); t.push_back(0); int len1{}; int len2{}; vector<int> seg1{}; vector<int> seg2{}; build(n,s,len1,seg1); build(n,t,len2,seg2); int out = 0; for (int i{1};i<n;++i) { // cout << s[i] << " " << t[i] << "\n"; int a = fmin(len1,seg1); update(len1,seg1,a,INF); update(len2,seg2,a,INF); int b = fmin(len2,seg2); out += max(0,t[b]-s[a]); update(len2,seg2,b,t[a]); t[b] = t[a]; s[a] = INF; t[a] = INF; } return out; }

컴파일 시 표준 에러 (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...