#include "walk.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 5e6+1, inf = 2e18;
map<pii,int> id;
int gg = 0;
int node(int x,int y) {
	if (id.count({x,y})) return id[{x,y}];
	return id[{x,y}] = ++gg;
}
vector<pii> edges[LIM];
vi dist(LIM);
int min_distance(std::vector<signed> x, std::vector<signed> h, std::vector<signed> l, std::vector<signed> r, std::vector<signed> y, signed s, signed g) {
	int n = big(x);
	for (int i = 0;i<n;i++) node(x[i],0),node(x[i],h[i]);
	int m = big(l);
	for (int i = 0;i<m;i++) {
		int px = x[l[i]];
		for (int j = l[i]+1;j<=r[i];j++) {
			if (y[i] > h[j]) continue;
			int a = node(px,y[i]);
			int b = node(x[j],y[i]);
			edges[a].push_back({b,x[j]-px});
			edges[b].push_back({a,x[j]-px});
			px = x[j];
		} 
	}
	for (int i = 0;i<n;i++) {
		auto it = id.lower_bound({x[i],0});
		while (it != id.end() && next(it) != id.end() && next(it)->ff.ff == it->ff.ff) {
			edges[node(it->ff.ff,it->ff.ss)].push_back({node(it->ff.ff,next(it)->ff.ss),next(it)->ff.ss-it->ff.ss});
			edges[node(it->ff.ff,next(it)->ff.ss)].push_back({node(it->ff.ff,it->ff.ss),next(it)->ff.ss-it->ff.ss});
			it = next(it);
		}
	}
	priority_queue<pii,vector<pii>,greater<pii>> pq;
	pq.push({0,node(x[s],0)});
	dist.assign(gg+1,inf);
	dist[node(x[s],0)] = 0;
	while (!pq.empty()) {
		auto [cost,city] = pq.top();
		pq.pop();
		if (dist[city] != cost) continue;
		for (auto it : edges[city]) {
			if (dist[it.ff] > cost+it.ss) {
				dist[it.ff] = cost+it.ss;
				pq.push({cost+it.ss,it.ff});
			}
		}
	}
	return dist[node(x[g],0)];
}
| # | 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... |