# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
810246 | vjudge1 | Railway Trip 2 (JOI22_ho_t4) | C++17 | 2070 ms | 136744 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define TL ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define rall(s) s.rbegin(),s.rend()
#define all(s) s.begin(),s.end()
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ld long double
#define YES cout<<"YES\n"
#define Yes cout<<"Yes\n"
#define yes cout<<"yes\n"
#define NO cout<<"NO\n"
#define No cout<<"No\n"
#define no cout<<"no\n"
const int N = 5e5 + 9 , mod = 1e9 + 7;
ll d[N] = {} , a[N] = {}, dp[N] , b[N] , c[N];
struct edge{
ll a , b, c;
};
vector<pair<int,int>>v[N] , v1 , v2;
vector<edge>vc;
multiset<ll>st[N][2] , st1[N][2];
void solve(){
ll q , i , j , m ,n, z ,s = 0 , f , l , r , k , x , y , mn = 1e18 , mx = 0;
cin>>n>>k;
cin>>m;
for(i = 1; i <= n; i++)
a[i] = b[i] = i;
for(i = 1; i <= m; i++){
cin>>l>>r;
if(l > r){
x = max(l - k + 1 , r + 1);
// for(j = l ; j >= x; j--)
// a[j] = min(a[j] , r);
st[l][0].insert(r);
st[x][1].insert(r);
}else {
x = min(l + k - 1 , r - 1);
st1[l][0].insert(r);
st1[x][1].insert(r);
//for(j = l; j <= x; j++)
// b[j] = max(b[j] , r);
vc.pb({l , x , r});
}
}
multiset<ll>v;
for(i = n; i >= 1; i--){
for(auto it : st[i][0])
v.insert(it);
if(v.size())
a[i] = min(a[i] , *v.begin());
for(auto it : st[i][1])
v.erase(v.find(it));
}
v.clear();
for(i = 1; i <= n; i++){
for(auto it : st1[i][0])
v.insert(it);
if(v.size())
b[i] = max(b[i] , *v.rbegin());
for(auto it : st1[i][1])
v.erase(v.find(it));
}
set<ll>st;
cin>>q;
while(q--){
cin>>x>>y;
set<ll>st;
for(i = 1; i <= n; i++){
d[i] = 1e9;
st.insert(i);
}
queue<int>qq;
qq.push(x);
st.erase(x);
d[x] = 0;
while(!qq.empty()){
i= qq.front();
qq.pop();
auto it = st.lower_bound(i);
while(st.size() && it != st.end() && *it <= b[i]){
d[*it] = d[i] + 1;
qq.push(*it);
st.erase(it);
it = st.lower_bound(i);
}
while(st.size() && *st.begin() < i){
auto it = st.lower_bound(i);
it--;
if(*it < a[i])
break;
d[*it] = d[i] + 1;
qq.push(*it);
st.erase(it);
}
}
if(d[y] == 1e9)
d[y] = -1;
cout<<d[y]<<"\n";
}
}
int main(){
TL;
/* #ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
*/
int t = 1;
//cin>>t;
while(t--)
{
solve();
}
}
// Author : حسن
Compilation message (stderr)
# | 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... |