Cod sursa(job #1591752)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 6 februarie 2016 17:26:46
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#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;
}