Submission #1192425

#TimeUsernameProblemLanguageResultExecution timeMemory
1192425epicci23Passport (JOI23_passport)C++20
48 / 100
884 ms1114112 KiB
#include "bits/stdc++.h" #define int long long #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() using namespace std; const int INF = 1e18; const int N = 2505; vector<array<int,3>> v[N][N]; void _(){ int n; cin >> n; int L[n],R[n]; for(int i = 0; i < n; i++){ cin >> L[i] >> R[i]; --L[i], --R[i]; } vector<vector<int>> dist(n, vector<int>(n, INF)); for(int i = 0; i < n; i++){ int left = -1, right = -1; for(int j = i; j < n; j++){ if(left == -1 || L[j] < L[left]) left = j; if(right == -1 || R[j] > R[right]) right = j; v[L[left]][j].push_back({i, j, 1}); v[i][R[right]].push_back({i, j, 1}); if(i == j){ v[L[i]][R[i]].push_back({i, i, 1}); } if(i < j){ v[i + 1][j].push_back({i, j, 0}); v[i][j - 1].push_back({i, j, 0}); } } } dist[0][n-1] = 0; deque<array<int,2>> dq; dq.push_back({0, n - 1}); while(!dq.empty()){ int l = dq.front()[0], r = dq.front()[1]; dq.pop_front(); for(auto [x, y, w] : v[l][r]){ if(w == 0 && dist[l][r] < dist[x][y]){ dist[x][y] = dist[l][r]; dq.push_front({x, y}); } else if(w == 1 && dist[l][r] + 1 < dist[x][y]){ dist[x][y] = dist[l][r] + 1; dq.push_back({x, y}); } } } int q; cin >> q; while(q--){ int c; cin >> c; --c; if(dist[c][c] == INF) cout << -1 << '\n'; else cout << dist[c][c] << '\n'; } } int32_t main(){ cin.tie(0); ios::sync_with_stdio(0); int tc=1;//cin >> tc; while(tc--) _(); return 0; }
#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...