Cod sursa(job #1017882)

Utilizator stefyvoltFMI Stefan Niculae stefyvolt Data 28 octombrie 2013 16:31:16
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
  
using namespace std;
  
int n, k, v[3000000];
  
void stat_de_ord(int a=1, int b=n)      // quicksort modificat
{
    int i=a, j=b, p=pv[rand()%(b-a+1) + a];     // v[i=a ... p ... j = b]
  
    while(i <= j)                       // cat timp i nu a ajuns la j
    {
        while(v[i] < p) i++;            // crestem i pana ajungem la pivot
        while(v[j] > p) j--;            // scadem j pana la pivot
  
        if(i <= j)                      // daca elementele la care ne-am oprit sunt de parti opuse ale pivotului
        {
            int aux = v[i];
        v[i] = v[j];            // le interschimbam valorile
            v[j] = aux;
        i++; j--;                   // si le lasam sa continue drumul
        }
    }
  
    if      (k <= j && a < j) stat_de_ord(a,j);        // apelam QS in subvectorul din stanga
    else if (k > j && i < b)  stat_de_ord(i,b);        // apelam QS in dreapta
}
  
int main()
{
    ifstream f ("sdo.in");
    ofstream g ("sdo.out");
  
    f >> n >> k;
    for(int i=1; i<=n; i++) f >> v[i];
  
    stat_de_ord();
  
    g << v[k];
  
    return 0;
}