我的思路是分治(可能不是);
我的题解:
#include<bits/stdc++.h>
using namespace std;
int n,m[500010],k,l[500010];
void quick(int h,int t){
if(t-h==1){
return ;
}
int p[500010];
quick(h,(h+t)/2);
quick((h+t)/2+1,t);
int h1=h;
int h2=(h+t)/2+1;
int tail=h+1;
while(h1<(h+t)/2 && h2<t){
p[tail++]=max(l[h1],l[h2]);
if(l[h1]<l[h2]){
h2++;
}
else{
h1++;
}
}
if(h2<t){
for(;h2<=t;h2++){
p[tail++]=l[h2];
}
}
else{
for(;h1<=(h+t)/2;h1++){
p[tail++]=l[h1];
}
}
for(int i=h;i<=t;i++){
l[i]=p[i];
}
return;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>m[i];
l[i]=m[i];
}
for(int i=2;i<=n;i++){
quick(1,n);
cout<<l[k]<<endl;
for(int i=1;i<=n;i++){
l[i]=m[i];
}
}
}
quick是排序 但出错了 求bug在哪