Submission #1274990

#TimeUsernameProblemLanguageResultExecution timeMemory
1274990Bui_Quoc_CuongFire (BOI24_fire)C++20
100 / 100
108 ms44340 KiB
#include <bits/stdc++.h> using namespace std; #define int long long template<class T> bool minimize(T &a, const T &b) { if (a > b) return a = b, true; return false; } template<class T> bool maximize(T &a, const T &b) { if (a < b) return a = b, true; return false; } const int N = 5e5 + 5; int n, cir; struct Lines { int st, ed; }; Lines line[N]; void init () { cin >> n >> cir; for (int i = 1; i <= n; i++) { cin >> line[i].st >> line[i].ed; line[i].st++; line[i].ed++; } for (int i = 1; i <= n; i++) if (line[i].st > line[i].ed) line[i].ed+= cir; } Lines b[N]; int rmq[N][22]; void process () { sort(line + 1, line + 1 + n, [&] (Lines u, Lines v) { if (u.st == v.st) return u.ed < v.ed; return u.st < v.st; }); int m = 0; vector <pair <int, int>> seg; for (int i = 1; i <= n; i++) { if (!seg.empty() && seg.back().second >= line[i].ed) continue; seg.push_back(make_pair(line[i].st, line[i].ed)); } for (int i = 0; i < seg.size(); i++) b[i + 1] = {seg[i].first, seg[i].second}; m = seg.size(); int j = 1; for (int i = 1; i <= m; i++) { while (j <= m && b[j].st <= b[i].ed) j++; rmq[i][0] = j - 1; } for (int j = 1; (1 << j) <= m; j++) { for (int i = 1; i <= m; i++) { rmq[i][j] = rmq[rmq[i][j - 1]][j - 1]; } } auto ask = [&] (int u, int R) { int res = 1; // cout << rmq[u][0] << "\n"; for (int s = 18; s >= 0; s--) { int nxt = rmq[u][s]; if (b[nxt].ed < R && b[nxt].ed > 0) { // cout << u << " " << nxt << "\n"; u = nxt; res+= (1 << s); } } for (int s = 0; s <= 18; s++) if (b[rmq[u][s]].ed >= R) { return res + (1 << s); } return (int) 2e9; }; int ans = 2e9; for (int i = 1; i <= m; i++) { /// cout << b[i].st << " " << b[i].ed << "\n"; } for (int i = 1; i <= m; i++) { int R = b[i].st + cir; ///cout << i << " " << b[i].st << " " << R << " " << ask(i, R) << "\n"; ans = min(ans, ask(i, R)); } if (ans == 2e9) cout << - 1; else cout << ans; } signed main () { ios_base :: sync_with_stdio(0); cin.tie(0); #define taskname "cungtroncc" if (fopen(taskname".inp", "r")) { freopen(taskname".inp", "r", stdin); freopen(taskname".out", "w", stdout); } init(); process(); return 0; } /* 4 10 1 3 3 7 2 4 6 2 */

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:102:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:103:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  103 |         freopen(taskname".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...