제출 #793832

#제출 시각아이디문제언어결과실행 시간메모리
793832vjudge1Passport (JOI23_passport)C++17
22 / 100
25 ms2656 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 3010;
const int INF = 1e9;

int dp[N][N];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n;
    cin >> n;
    int L[n + 1], R[n + 1];
    for(int i = 1; i <= n; i++)
        cin >> L[i] >> R[i];
    int mx[n + 1] = {};
    for(int i = 1; i <= n; i++) 
        mx[i] = max(mx[i - 1], R[i]);
    if(n <= 300) {
        dp[1][n] = 0;
        for(int len = n - 1; len >= 1; len--) {
            for(int l = 1; l <= n - len + 1; l++) {
                int r = l + len - 1;
                dp[l][r] = INF;
                for(int i = l; i <= r; i++) {
                    dp[l][r] = min(dp[l][r], dp[min(l, L[i])][max(r, R[i])] + 1);
                } 
            }
        }   
        int q;
        cin >> q;
        while(q--) {
            int x;
            cin >> x;
            cout << (dp[x][x] == INF ? -1 : dp[x][x]) << '\n';
        }
        return 0;
    }
    int q;
    cin >> q;
    int x, res = 0;
    cin >> x;
    while(x < n) {
        res++;
        if(mx[x] == x) {
            cout << -1;
            return 0;
        }
        x = max(x, mx[x]);
    }
    cout << res;
}
#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...