比赛 树形数据结构进阶(再进阶) 评测结果 AAAAAAAAAAAATTTTTTTT
题目名称 区间 最终得分 60
用户昵称 123 运行时间 35.888 s
代码语言 C++ 内存使用 11.60 MiB
提交时间 2025-04-19 10:41:09
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=500010; 
struct node {
	int l,r;
} a[N];
int n,m,tot=0,ret=1e9;
deque<int> q;
vector<int> v;
map<int,int> mp;
int cmd(node x,node y)
{
	return x.r-x.l<y.r-y.l;
}
int main() {
	freopen("interval.in","r",stdin);
	freopen("interval.out","w",stdout); 
	cin>>n>>m; 
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i].l,&a[i].r);
		v.push_back(a[i].l),v.push_back(a[i].r);
	}
	sort(v.begin(),v.end()),v.erase(unique(v.begin(),v.end()),v.end());
	sort(a+1,a+n+1,cmd);
	for (int i=0;i<v.size();i++)
	{
		mp[v[i]]=++tot;
	}
	for (int i=1;i<=v.size();i++)
	{
		q.clear(); 
		int cnt=0;
		for (int j=1;j<=n;j++)
		{
			if (mp[a[j].l]<=i && i<=mp[a[j].r])
			{
				if (cnt==m-1)
				{
//					cout<<a[j].l<<" "<<a[j].r<<" "<<q.front()<<" "<<a[j].r-a[j].l<<endl; 
					ret=min(ret,a[j].r-a[j].l-q.front());
					q.pop_front(),q.push_back(a[j].r-a[j].l);
				}
				else
				{
					cnt++;
					q.push_back(a[j].r-a[j].l);
				}
			}
		}
	}
	if (ret==1e9) cout<<-1;
	else cout<<ret;
}