제출 #1283605

#제출 시각아이디문제언어결과실행 시간메모리
1283605stanwaibbangeRoller Coaster Railroad (IOI16_railroad)C++20
0 / 100
81 ms7576 KiB
#include "railroad.h" #include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = numeric_limits<ll>::max(); // 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); ll 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.cpp: In function 'void build(int, std::vector<int>&, int&, std::vector<int>&)':
railroad.cpp:20:22: warning: overflow in conversion from 'long long int' to 'std::vector<int>::value_type' {aka 'int'} changes value from '9223372036854775807' to '-1' [-Woverflow]
   20 |     seg.resize(2*len,INF);
      |                      ^~~
railroad.cpp: In function 'long long int plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:52:17: warning: overflow in conversion from 'long long int' to 'std::vector<int>::value_type' {aka 'int'} changes value from '9223372036854775807' to '-1' [-Woverflow]
   52 |     s.push_back(INF);
      |                 ^~~
railroad.cpp:66:28: warning: overflow in conversion from 'long long int' to 'int' changes value from '9223372036854775807' to '-1' [-Woverflow]
   66 |         update(len1,seg1,a,INF);
      |                            ^~~
railroad.cpp:67:28: warning: overflow in conversion from 'long long int' to 'int' changes value from '9223372036854775807' to '-1' [-Woverflow]
   67 |         update(len2,seg2,a,INF);
      |                            ^~~
railroad.cpp:72:16: warning: overflow in conversion from 'long long int' to '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} changes value from '9223372036854775807' to '-1' [-Woverflow]
   72 |         s[a] = INF;
      |                ^~~
railroad.cpp:73:16: warning: overflow in conversion from 'long long int' to '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} changes value from '9223372036854775807' to '-1' [-Woverflow]
   73 |         t[a] = INF;
      |                ^~~
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...