比赛 EYOI与SBOI开学欢乐赛1st 评测结果 AAAAAAAAAA
题目名称 双倍腹肌量 最终得分 100
用户昵称 lavey 运行时间 0.956 s
代码语言 C++ 内存使用 4.36 MiB
提交时间 2022-08-29 22:14:45
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
//int x[200000],t[200000];
struct node{
	int x,t;
}d[200000];
bool cmp(node y,node z)
{
	return y.x<z.x;
}
priority_queue<pair<int,int>> f,g;
int ans=0x3f3f3f3f;
int main(){
	freopen("double_muscle.in","r",stdin);
	freopen("double_muscle.out","w",stdout);
cin>>n>>m;
for(int q=1;q<=n;q++) cin>>d[q].x>>d[q].t;
sort(d+1,d+n+1,cmp);
for(int q=1;q<=n;q++)
{
	//大根堆 
	while(f.size()&&f.top().first-d[q].t>=m)
	{
		ans=min(ans,d[q].x-f.top().second);
		f.pop();
	}
	//小根堆 
	while(g.size()&&d[q].t-(-g.top().first)>=m)
	{
		ans=min(ans,d[q].x-g.top().second);
		g.pop();
	}
	f.push({d[q].t,d[q].x});
	g.push({-d[q].t,d[q].x});
}
//for(int q=1;q<=n;q++)
//{
//	for(int w=q+1;w<=n;w++)
//	{
//		if(d[w].t-d[q].t>=m) ans=min(ans,abs(d[q].x-d[w].x));
//	}
//}
cout<<ans;
return 0;
}