Submission #1028214

#TimeUsernameProblemLanguageResultExecution timeMemory
1028214IssaFire (BOI24_fire)C++17
100 / 100
69 ms38968 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ent "\n" const int maxn = 1e6 + 100; const ll INF = (ll)1e18 + 100; const int inf = 1e9 + 100; const int MOD = 1e9 + 7; const int maxl = 20; const int P = 31; int n, m; pii a[maxn]; int p[maxl][maxn]; void test(){ cin >> n >> m; vector<pii> v; for(int i = 1; i <= n; i++){ cin >> a[i].first >> a[i].second; if(a[i].second < a[i].first) a[i].second += m; } sort(a + 1, a + n + 1); for(int i = 1; i <= n; i++){ v.push_back({a[i].second, i}); } sort(v.begin(), v.end()); int j = 0, mx = 0; for(auto [x, i]: v){ while(j < n && a[j+1].first <= x){ j++; if(!mx || a[mx].second < a[j].second) mx = j; } p[0][i] = mx; } for(int k = 1; k < maxl; k++){ for(int i = 1; i <= n; i++){ p[k][i] = p[k-1][p[k-1][i]]; } } int ans = inf; for(int i = 1; i <= n; i++){ int j = i, cnt = 0; for(int k = maxl - 1; k >= 0; k--){ if(a[p[k][j]].second - a[i].first < m){ j = p[k][j]; cnt += (1<<k); } } j = p[0][j]; cnt++; if(a[j].second - a[i].first >= m){ ans = min(ans, cnt + 1); } } if(ans == inf) ans = -1; cout << ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; t = 1; while(t--) test(); cout << ent; }
#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...