比赛 |
树形数据结构进阶(再进阶) |
评测结果 |
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;
}