很奇怪
我的代码:
#include<bits/stdc++.h>
#define LL long long
#define mp make_pair
#define SZ(x) ((int)x.size()-1)
#define ms(a,b) memset(a,b,sizeof a)
#define F(i,a,b) for(int i=(a);i<=(b);++i)
#define DF(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
inline int read(){char ch=getchar(); int w=1,c=0;
for(;!isdigit(ch);ch=getchar()) if (ch=='-') w=-1;
for(;isdigit(ch);ch=getchar()) c=(c<<1)+(c<<3)+(ch^48);
return w*c;
}
const int N=2e5+10;
struct Duck{
int x,y,id;
bool operator<(const Duck&t)const{
if(x==t.x)return y<t.y;
return x<t.x;
}
}a[N<<1];
int tot,h[N],sy[N],toty,f[N],maxn;
vector<pair<int,int> >v[N];
struct BIT{
int t[N];
void add(int x,int y){for(;x<=toty;x+=x&-x)t[x]=max(t[x],y);}
int qry(int x){int ans=0;for(;x;x-=x&-x)ans=max(ans,t[x]);return ans;}
}T;
int main(){
int n=read(),p=read();
F(i,1,p){
a[tot].x=read();a[tot].y=read();a[tot++].id=tot;
a[tot].x=read();a[tot].y=read();a[tot++].id=tot;
}sort(a,a+tot);
ms(h,-1);
F(i,0,tot-1){
sy[i]=a[i].y;
if(h[a[i].id^1]!=-1)v[i].emplace_back(h[a[i].id^1],a[i].x-a[h[a[i].id^1]].x+a[i].y-a[h[a[i].id^1]].y);
else h[a[i].id]=i;
}sort(sy,sy+tot);
toty=unique(sy,sy+tot)-sy;
F(i,0,tot-1)a[i].y=lower_bound(sy,sy+toty,a[i].y)-sy+1;
F(i,0,tot-1){
f[i]=T.qry(a[i].y);
for(pair<int,int>j:v[i])
f[i]=max(f[i],f[j.first]+j.second);
T.add(a[i].y,f[i]);
maxn=max(maxn,f[i]);
}cout<<n+n-maxn;
return 0;
}