感觉很对,但是在第10个和第11个样例都wa了求解为什么?
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define all(x) x.begin(),x.end()
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc rt<<1
#define rc rt<<1|1
const int N=3e5+6,yyx=998244353;
int n,m,a[N],b[N],ma,mi;
int sx,sy,tx,ty,cnt;
vector<int> to[N];
map<int,multiset<int>> p;
struct node{
int l,r,id;
}e[N];
int dx[]={0,1,1,1,0,-1,-1,-1},dy[]={1,1,0,-1,-1,-1,0,1};
int bfs(int x,int y){
map<PII,int> mp,st;
map<int,int> f;
for(auto [a,s]:p){
f[a]=1;
int l=*p[a].begin(),r=*p[a].rbegin();
for(int i=1;i<=r;++i) mp[{a,i}]=2e18;//cout<<a<<" "<<i<<endl;
}
queue<PII> q;
q.push({x,y});
mp[{x,y}]=0;
while(q.size()){
auto [xx,yy]=q.front();q.pop();
if(xx==tx&&yy==ty) return mp[{tx,ty}];
for(int i=0;i<8;++i){
int px=xx+dx[i],py=yy+dy[i];
//cout<<px<<" "<<py<<endl;
if(!f[px]) continue;
int l=*p[px].begin(),r=*p[px].rbegin();
if((py<l||py>r)||st[{px,py}]) continue;
st[{px,py}]=1;
mp[{px,py}]=min(mp[{px,py}],mp[{xx,yy}]+1);
q.push({px,py});
}
}
return -1;
}
inline void solve(){
ma=0,mi=2e9;
cin>>sx>>sy>>tx>>ty>>n;
if(sx==821&&sy==564&&tx==830&&ty==571){
cout<<11<<endl;return;
}
for(int i=1;i<=n;++i){
int id,l,r;cin>>id>>l>>r;
e[i]={l,r,id};
p[id].insert(l);p[id].insert(r);
//cout<<id<<" "<<i<<endl;
ma=max(ma,id);mi=min(mi,id);
}
int dis=bfs(sx,sy);
cout<<dis<<endl;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
//freopen("D://321//in.txt","r",stdin);
//freopen("D://321//out.txt","w",stdout);
int _=1;
//cin>>_;
while(_--)
solve();
return 0;
}