Cod sursa(job #1560640)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 2 ianuarie 2016 22:35:38
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

const int NMAX=3000005;

int n,k,a[NMAX];

void Qsort(int st,int dr)
{
    if (st==dr) {fout<<a[st]<<"\n";return ;}
    int i,poz,cnt=0,last;
    poz=rand()%(dr-st+1);
    poz+=st;
    //punem la sfarsit
    swap(a[poz],a[dr]);

    last=dr+1;
    for (i=st;i<dr;i++)
        if (a[i]<=a[dr])
        {
            if (last<=dr) swap(a[i],a[last]),last++;
            cnt++;
        }
        else if (a[i]>a[dr]) last=min(last,i);
    swap(a[dr],a[st+cnt]);

    if (k==(cnt+1)) fout<<a[st+cnt]<<"\n";
    else if (k<(cnt+1))//se afla in stanga
        Qsort(st,st+cnt-1);
    else {k-=cnt+1;Qsort(st+cnt+1,dr);}
}

int main()
{
    int i;
    fin>>n>>k;
    for (i=1;i<=n;i++) fin>>a[i];
    srand(time(0));
    Qsort(1,n);
    return 0;
}