Cod sursa(job #1715921)

Utilizator timicsIoana Tamas timics Data 11 iunie 2016 17:16:17
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#include<bitset>
#include<algorithm>
#include<iostream>
#include<vector>
#include<time.h>
#include<fstream>
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define MOD 1000000007
using namespace std;
int N,k,a[3000100];

void quicky(int l, int r) {
    if(l >= r) return;
    if(r == l+1) {
        if(a[r] < a[l]) {
            swap(a[l],a[r]);
        }
        return;
    }
    int piv = a[l + rand()%(r - l + 1)];
    int st = l-1, dr = r+1;
    while(true) {
        while(a[st+1] < piv) ++st;
        while(a[dr-1] > piv) --dr;
        if(st < dr) swap(a[st],a[dr]);
        else break;
    }
    if(dr >= k) {
        quicky(l,dr);
    } else {
        quicky(dr+1,r);
    }
}

int main() {
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    srand(time(0));
    fin>>N>>k;
    for(int i=1;i<=N;++i) {
        fin>>a[i];
    }
    quicky(1,N);
    fout<<a[k];
    return 0;
}