DFS
2025-01-27 12:13:16
发布于:广东
4阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int a[5000005],n,k;
int dfs(int L,int R,int k)
{
if(L==R) return a[L];
int mi=L+rand()%(R-L+1);
swap(a[L],a[mi]);
int x=a[L];
int ind=L,l=L,r=R;
while(l<r)
{
while(l<r&&a[r]>x) r--;
if(l<r)
{
a[ind]=a[r];
ind=r;
l++;
}
while(l<r&&a[l]<x) l++;
if(l<r)
{
a[ind]=a[l];
ind=l;
r--;
}
}
if(l-L>=k) return dfs(L,l-1,k);
else if(l-L==k-1) return x;
else return dfs(l+1,R,k-(l-L+1));
}
int main()
{
srand(time(0));
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>k;
k++;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<dfs(1,n,k);
}
全部评论 1
dw
2025-01-27 来自 广东
0
有帮助,赞一个