| 比赛 |
收心赛 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
卡牌游戏 |
最终得分 |
100 |
| 用户昵称 |
郑霁桓 |
运行时间 |
3.669 s |
| 代码语言 |
C++ |
内存使用 |
17.24 MiB |
| 提交时间 |
2026-02-24 09:25:34 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],b[1000005],d[2000005],p[1000005],r,ss,ps;
struct nm{
int v,id,ab;
}t[2000005];
bool cp(nm x,nm y){
return x.v<y.v;
}
inline bool f(int x){
r=ss=ps=0;
for(int i=1;i<=n;i++) p[i]=0;
for(int i=1;i<=n;i++){
if(i>1){
if(a[t[i-1].id]<i&&b[t[i-1].id]<i) return false;
if(p[t[i-1].id]==3){
if(t[i-1].ab==1) ps++,p[t[i-1].id]=2;
else p[t[i-1].id]=1;
}else{
ss--;
if(t[i-1].ab==2) ps--;
p[t[i-1].id]=0;
}
}
while(t[r+1].v-t[i].v<=x){
r++;
if(!p[t[r].id]){
ss++,p[t[r].id]=t[r].ab;
if(t[r].ab==2) ps++;
}else{
if(t[r].ab==1) ps--;
p[t[r].id]=3;
}
}
if(ss>=n&&ps<=m) return true;
}
return false;
}
int main(){
freopen("card.in","r",stdin);
freopen("card.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) t[i*2-1]={a[i],i,1},t[i*2]={b[i],i,2};
sort(t+1,t+n+n+1,cp);
for(int i=1;i<=n+n;i++) d[i]=t[i].v;
for(int i=1;i<=n;i++){
a[i]=lower_bound(d+1,d+n+n+1,a[i])-d;
b[i]=lower_bound(d+1,d+n+n+1,b[i])-d;
}
int l=0,r=t[n+n].v-t[1].v,md;
while(l<=r){
md=(l+r)>>1;
if(f(md)) r=md-1;
else l=md+1;
}
cout<<r+1;
return 0;
}