Pagini recente » Borderou de evaluare (job #1159788) | Cod sursa (job #1603801) | Cod sursa (job #148641) | Cod sursa (job #1604232) | Cod sursa (job #1591752)
#include <stdio.h>
#include <algorithm>
#define ll long long
#define pb push_back
#define mp make_pair
using namespace std;
int v[3*1000005];
int kthSmallest(int lf, int rg, int k){
int mn,mx;
mn = lf;
mx = rg;
int mij = lf+(rg-lf)/2;
while(mn <= mx){
while(v[mn] < v[mij]){
mn++;
}
while(v[mx] > v[mij]){
mx--;
}
if(mn <= mx){
swap(v[mn], v[mx]);
mn++;
mx--;
}
}
swap(mij, mx);
// if(v[mij] > v[mij+1]){
// swap(mij, mx);
// }else if(v[mij] < v[mij-1]){
// swap(mij, mn);
// }
if(mij == k){
return v[mij];
}
if(k > mij){
return kthSmallest(mij+1, rg, k);
}
return kthSmallest(lf, mij, k);
}
int main()
{
int k,n,i;
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d",&n,&k);
for(i = 1;i <= n;i++){
scanf("%d",&v[i]);
}
printf("%d",kthSmallest(1, n, k));
return 0;
}