Submission #1266675

#TimeUsernameProblemLanguageResultExecution timeMemory
1266675Bui_Quoc_CuongEscape Route 2 (JOI24_escape2)C++20
54 / 100
3095 ms37824 KiB
#include <bits/stdc++.h> using namespace std; #define mp make_pair #define mt make_tuple #define pb push_back #define sz(v) (int)v.size() #define fi first #define se second #define ALL(A) A.begin(), A.end() #define compact(v) v.erase(unique(ALL(v)), end(v)) #define FOR(i, a, b) for(int i = (a); i <= (int)(b); i++) #define FORD(i, a, b) for(int i = (a); i >= (int)(b); i--) #define BIT(mask,i) ((mask>>(i))&1) #define MASK(a) (1LL << (a)) #define lwb lower_bound #define upb upper_bound #define dbg(x) "[" #x " = " << (x) << "]" #define file(task) if(fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } template<typename T> bool minimize(T& a, const T& b){ if(a > b) return a = b, true; return false; } template<typename T> bool maximize(T& a, const T& b){ if(a < b) return a = b, true; return false; } using ll = long long; using ull = unsigned long long; using ld = long double; using db = double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vb = vector<bool>; using vll = vector<ll>; using vpi = vector<pii>; using vpl = vector<pll>; const int MAX = 2e5 + 5; const int LO = 20; int N, Q, T; vpi flight[MAX]; int L[MAX], R[MAX]; pii arr_flight[MAX]; int lift[MAX][LO]; ll cost[MAX][LO]; vpi compress(vpi fli){ // we not use : aj ... ai .... bi ... bj vpi res; sort(ALL(fli), [&](pii u, pii v){ if(u.fi == v.fi) return u.se > v.se; return u.fi < v.fi; }); for(auto x : fli){ while(!res.empty() && res.back().second >= x.se) res.pop_back(); res.push_back(x); } return res; } ll query(int i, int cnt){ ll sum = 0; FORD(s, 18, 0) if(cnt >= (1 << s)){ cnt-= (1 << s); sum+= cost[i][s]; i = lift[i][s]; } return sum + arr_flight[i].se - arr_flight[i].fi; } void solve(){ cin >> N >> T; int cnt = 0; FOR(i, 0, N - 2){ int m; cin >> m; flight[i].resize(m); FOR(j, 0, m - 1) cin >> flight[i][j].fi >> flight[i][j].se; flight[i] = compress(flight[i]); L[i] = cnt; R[i] = L[i] + flight[i].size() - 1; cnt = R[i] + 1; FOR(j, 0, sz(flight[i]) - 1) arr_flight[L[i] + j] = flight[i][j]; } L[N - 1] = cnt; R[N - 1] = cnt + 1; FOR(i, 0, sz(flight[N - 2]) - 1){ lift[L[N - 2] + i][0] = cnt; cost[L[N - 2] + i][0] = flight[N - 2][i].se - flight[N - 2][i].fi; } FOR(i, 0, N - 3){ int ptr = 0; FOR(j, 0, sz(flight[i]) - 1){ while(ptr < sz(flight[i + 1]) && flight[i + 1][ptr].fi < flight[i][j].se) ptr++; if(ptr == sz(flight[i + 1])){ lift[L[i] + j][0] = L[i + 1]; cost[L[i] + j][0] = T - flight[i][j].fi + flight[i + 1][0].fi; } else{ lift[L[i] + j][0] = L[i + 1] + ptr; cost[L[i] + j][0] = flight[i + 1][ptr].fi - flight[i][j].fi; } } } for(int j = 1; (1 << j) <= cnt; j++){ FOR(i, 0, cnt){ lift[i][j] = lift[lift[i][j - 1]][j - 1]; cost[i][j] = cost[i][j - 1] + cost[lift[i][j - 1]][j - 1]; } } cin >> Q; while(Q--){ int l, r; cin >> l >> r; l--; r--; ll ans = 1e18; FOR(i, L[l], R[l]) minimize(ans, query(i, r - l - 1)); cout << ans << "\n"; } } int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); file("joi24_escape2"); int tc = 1; // cin >> tc; while (tc--) solve(); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:22:55: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define file(task) if(fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); }
      |                                                ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:141:5: note: in expansion of macro 'file'
  141 |     file("joi24_escape2");
      |     ^~~~
Main.cpp:22:88: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define file(task) if(fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); }
      |                                                                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:141:5: note: in expansion of macro 'file'
  141 |     file("joi24_escape2");
      |     ^~~~
#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...