Submission #1261690

#TimeUsernameProblemLanguageResultExecution timeMemory
1261690ereringPassport (JOI23_passport)C++20
40 / 100
2096 ms35384 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=2e5+5,inf=1e18;
int n;
pair<int,int> p[N];
int dp[2505][2505];
int vis[2505][2505],cnt=1;
int solve(int l,int r){
    priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>> pq;
    pq.push({1,{l,r}});
    dp[l][r]=1; vis[l][r]=cnt;
    while(!pq.empty()){
        int score=pq.top().first;
        l=pq.top().second.first; r=pq.top().second.second;
       // cout<<score<<' '<<l<<' '<<r<<endl;
        pq.pop();
        if(dp[l][r]<score)continue;
        //cout<<"ye"<<endl;
        for(int i=l;i<=r;i++){
            if(l<=p[i].first && r>=p[i].second)continue;
            int nl=min(l,p[i].first),nr=max(r,p[i].second);
            //cout<<nl<<' '<<nr<<endl;
            if(vis[nl][nr]==cnt && dp[nl][nr]<=score+1)continue;
            dp[nl][nr]=score+1; vis[nl][nr]=cnt;
            pq.push({score+1,{nl,nr}});
        }
    }
    if(vis[1][n]==cnt)return dp[1][n];
    return -1;
}
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)cin>>p[i].first>>p[i].second;
    int q; cin>>q;
    while(q--){
        int x; cin>>x;
        cout<<solve(p[x].first,p[x].second)<<endl;
        cnt++;
    }
}
#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...