尺取法70ptsWA求助
查看原帖
尺取法70ptsWA求助
285617
黑影洞人楼主2022/10/28 22:07
#include<cstdio>
#include<algorithm>
#include<set>
#define N 1919810
#define int long long
using namespace std;
int n,len,las,cnt[N],all,ans=1e18,d;
struct cow{
	int ps,h;
	bool operator<(const cow &a)const{return ps<a.ps;}
}a[N];
set<int>st;
void add(int x){
	if(!st.empty())if(*(--st.end())-*st.begin()>=d)ans=min(ans,len);
	len+=a[x].ps-a[x-1].ps;
	st.insert(a[x].h);
	if(!st.empty())if(*(--st.end())-*st.begin()>=d)ans=min(ans,len);
}
void del(int x){
	if(!st.empty())if(*(--st.end())-*st.begin()>=d)ans=min(ans,len);
	len-=a[x+1].ps-a[x].ps;
	st.erase(a[x].h);
	if(!st.empty())if(*(--st.end())-*st.begin()>=d)ans=min(ans,len);
}
signed main(){
	//freopen("P2698_6.in","r",stdin); 
	scanf("%lld%lld",&n,&d);
	for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i].ps,&a[i].h);
	sort(a+1,a+n+1);
	a[0].ps=a[1].ps;
	int l=1,r=0;
	while(r<n){
		add(++r);
		while(l<=r&&*(--st.end())-*st.begin()>=d)del(l++);
	}
	if(ans!=1e18)printf("%lld",ans);
	else puts("-1");
	return 0;
}
2022/10/28 22:07
加载中...