Cod sursa(job #2691981)

Utilizator PaulOrasanPaul Orasan PaulOrasan Data 30 decembrie 2020 22:51:21
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int NMAX=3000010;
int n,k,v[NMAX];
void citire()
{
    fin>>n>>k;
    for (int i=0; i<n; i++)
        fin>>v[i];
}
int partitionare(int st,int dr, int pivotIndex)
{
    int pivotVal=v[pivotIndex];
    int i=st-1,j=dr+1;
    while (true){
        do{
            i++;
        }while (v[i]<pivotVal);
        do{
            j--;
        }while (v[j]>pivotVal);
        if (i>=j)
            return j;
        swap(v[i],v[j]);
    }
}
void quickSelect(int st,int dr,int k)
{
    if (st==dr)
        return;
    int pivot=partitionare(st,dr,(st+dr)/2);
    if (pivot==k)
        return;
    if (pivot<k)
        quickSelect(pivot+1,dr,k);
    quickSelect(st,pivot,k);
}
void afisare()
{
    fout<<v[k-1]<<'\n';
}
int main()
{
    citire();
    fin.close();
    quickSelect(0,n-1,k-1);
    afisare();
    fout.close();
    return 0;
}