제출 #1028210

#제출 시각아이디문제언어결과실행 시간메모리
1028210IssaFire (BOI24_fire)C++17
21 / 100
104 ms42176 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; int en = n; 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; else{ a[++en] = a[i]; a[en].first += m; a[en].second += m; } } n = en; 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] = j; } 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...