#include "walk.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 2e6;
const ll inf = 1e18;
vector<pair<int,int>> nei[M];
ll dis[M];
ll dijkstra(int u,int v)
{
	for (int i=0;i<M;i++) dis[i]=inf;
	set<pair<ll,int>> se;
	dis[u]=0;
	se.insert({0,u});
	while (!se.empty())
	{
		pair<ll,int> p=*se.begin();se.erase(p);
		for (auto [i,w]:nei[p.second])
			if (dis[i]>w+p.first)
			{
				se.erase({dis[i],i});
				dis[i]=w+p.first;
				se.insert({dis[i],i});
			}
	}
	return (dis[v]<inf?dis[v]:-1);
}
long long min_distance(vector<int> x, vector<int> h, vector<int> l, vector<int> r, vector<int> y, int s, int g)
{
	int n=x.size(),m=l.size();
	vector<pair<int,int>> v1;
	for (int i=0;i<n;i++)
		v1.push_back({h[i],m+i});
	for (int i=0;i<m;i++)
		v1.push_back({y[i],i});
	sort(v1.rbegin(),v1.rend());
	set<int> se;
	vector<pair<int,int>> v[n];
	int id=0;
	for (int i=0;i<n;i++)
		v[i].push_back({0,id++});
	for (auto [i,j]:v1)
	{
		if (j<m)
		{
			auto it=se.lower_bound(l[j]);
			auto it1=se.upper_bound(r[j]);
			int prv=-1,cur,dif;
			while (it!=it1)
			{
				if (v[*it].empty() or v[*it].back().first!=i)
					v[*it].push_back({i,id++});
				int cur=v[*it].back().second;
				if (~prv)
				{
					nei[cur].push_back({prv,x[*it]-dif}),
					nei[prv].push_back({cur,x[*it]-dif});
				}
				prv=cur, dif=x[*it];
				it++;
			}
		}
		else
			se.insert(j-m);
	}
	for (int i=0;i<n;i++)
	{
		sort(v[i].begin(),v[i].end());
		for (int j=1;j<v[i].size();j++)
		{
			int d=v[i][j].first-v[i][j-1].first;
			nei[v[i][j-1].second].push_back({v[i][j].second,d});
			nei[v[i][j].second].push_back({v[i][j-1].second,d});
		}
	}
	return dijkstra(v[s][0].second,v[g][0].second);
}
| # | 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... |