Cod sursa(job #2305856)

Utilizator refugiatBoni Daniel Stefan refugiat Data 21 decembrie 2018 11:45:27
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream si("sdo.in");
ofstream so("sdo.out");
int v[3000005];
int sortare(int st, int dr) {
    int piv=v[(st+dr)>>1];
    int i=st-1, j=dr+1, aux;
    while(1) {
        i++;
        while(piv>v[i])
            ++i;
        j--;
        while(piv<v[j])
            --j;
        if(i<j) {
            aux=v[i];
            v[i]=v[j];
            v[j]=aux;
        }
        else
            return j;
    }
}
int main() {
    int n, k;
    si>>n>>k;
    for(int i=1; i<=n; ++i)
        si>>v[i];
    int st=1, s, dr=n, t, r=k;
    while(st<dr) {
        s=sortare(st,dr);
        t=s-st+1;
        if(t>=r) {
            dr=s;
        }
        else {
            st=s+1;
            r-=t;
        }
    }
    cout<<v[k];
    return 0;
}