比赛 树形数据结构进阶(再进阶) 评测结果 AAAAAAAAAAAATTTTTTTT
题目名称 区间 最终得分 60
用户昵称 彭欣越 运行时间 32.162 s
代码语言 C++ 内存使用 14.46 MiB
提交时间 2025-04-19 11:42:05
显示代码纯文本
#include <bits/stdc++.h>
#define ls p*2
#define rs p*2+1
using namespace std;
typedef long long ll;
const int N=500010,M=200010;
int n,m,t,tot;
ll l[N],r[N],s[N],c[N],res=1e9;
unordered_map<int,int>mp;
deque<int>q;
struct node {
	ll l,r,sum;
	bool operator <(const node&o) const{
		return sum<o.sum;
	}
}a[N];
int main () {
	freopen("interval.in","r",stdin);
	freopen("interval.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> m;
    for (int i=1;i<=n;i++) {
    	cin >> l[i] >> r[i];
    	s[i]=r[i]-l[i];
    	c[++t]=l[i],c[++t]=r[i];
	}
    sort(c+1,c+t+1);
    for (int i=1;i<=t;i++) {
    	if (!mp[c[i]]) mp[c[i]]=++tot;
	}
	for (int i=1;i<=n;i++) {
		a[i].l=mp[l[i]],a[i].r=mp[r[i]];
		a[i].sum=s[i];
	}
	sort(a+1,a+n+1);
	for (int i=1;i<=tot;i++) {
		q.clear();
	    int cnt=0;
		for (int j=1;j<=n;j++) {
			if (a[j].l<=i&&i<=a[j].r) {
				if (cnt==m-1) {
					res=min(res,a[j].sum-q.front());
					q.pop_front();
					q.push_back(a[j].sum);
				}else{
					cnt++;
					q.push_back(a[j].sum);
				}
			}
		}
	}
	if (res==1e9) cout << -1 <<endl;
	else cout << res <<endl;
	return 0;
}