Cod sursa(job #2295953)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 4 decembrie 2018 01:28:11
Problema Statistici de ordine Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
int v[500001];
int partitie(int v[],int st,int dr)
{
    int i,j,pivot=v[rand()%(dr-st+1)+st];
    i=st;
    j=dr;
    while(1)
    {
        while(v[i]<pivot)
        {
            i++;
        }
        while(pivot<v[j])
        {
            j--;
        }
        if(i<j)
        {
            swap(v[i],v[j]);
        }
        else
        {
            return j;
        }
    }
    return 0;
}
void QuickSort(int v[],int k,int st, int dr)
{
	if(st==dr)
    {
        return;
    }
    int a,b;
    a=partitie(v,st,dr);
    b=a-st+1;
    if(b>=k)
    {
        QuickSort(v,k,st,a);
    }
    else
    {
        QuickSort(v,k-b,a+1,dr);
    }
}
int main()
{
    srand(time(NULL));
    int n,i,k;
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    QuickSort(v,k,1,n);
    fout<<v[k];
    fin.close();
    fout.close();
    return 0;
}