이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
bool can_reach(int i, int j, vector<int>& S, vector<int>& E){
if(S[j] <= E[i] && E[i] <= E[j]) return true;
else return false;
}
void solve(){
int N, Q; cin >> N >> Q;
vector<int> E(N);
vector<int> original_start(N);
vector<pair<int, int>> S(N);
for(int i = 0; i < N; i++) {cin >> S[i].first >> E[i]; S[i].second = i; original_start[i] = S[i].first;}
vector<pair<int, int>> adj(N); //Order by E[i], then by i.
set<pair<int,int>> s;
sort(S.begin(), S.end());
for(pair<int, int> p : S){
while((int)s.size() > 0 && (*s.begin()).first < p.first){
pair<int, int> pr = *s.begin(); s.erase(s.begin());
pair<int, int> pr1 = {-1, -1};
if((int)s.size() > 0) pr1 = *s.rbegin();
adj[pr.second] = max(pr1, pr);
}
s.insert({E[p.second], p.second});
}
while((int)s.size() > 0){
pair<int, int> pr = *s.begin(); s.erase(s.begin());
pair<int, int> pr1 = {-1, -1};
if((int)s.size() > 0) pr1 = *s.rbegin();
adj[pr.second] = max(pr1, pr);
}
vector<vector<pair<int, int>>> dp(20, vector<pair<int, int>>(N));
for(int k = 0; k < 20; k++){
for(int i = 0; i < N; i++){
if(k == 0) dp[k][i] = adj[i];
else{
dp[k][i] = dp[k-1][dp[k-1][i].second];
}
}
}
while(Q--){
int s, e; cin >> s >> e; s--; e--;
if(s == e){
cout << 0 << endl;
continue;
}
int ans = 0;
for(int k = 19; k >= 0; k--){
pair<int, int> pr = {E[e], e};
if(dp[k][s] < pr){
s = dp[k][s].second;
ans += (1 << k);
}
}
ans++;
if(can_reach(s, e, original_start, E)) cout << ans << endl;
else cout << "impossible" << endl;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |