제출 #1261690

#제출 시각아이디문제언어결과실행 시간메모리
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...