Cod sursa(job #2198298)

Utilizator ilie0712Botosan Ilie ilie0712 Data 24 aprilie 2018 10:32:02
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <cstdio>

using namespace std;

const int N=3000000;

int v[N+1], k;

//ifstream in("sdo.in");
FILE * in = fopen("sdo.in", "r");

ofstream out("sdo.out");

void partitie3(int st, int dr, int &p, int &u)
{
    int pivot = v[st + rand() % (dr - st + 1)], i=st;
    p=st;
    u=dr;
    while(i<=u)
    {
        if(v[i]<pivot)
            swap(v[i++], v[p++]);

        else if(v[i]>pivot)
            swap(v[i],v[u--]);

        else i++;


    }
    p--;u++;
}

void qs(int st, int dr)
{
    if(st>=dr) return;
    int p,u;
    partitie3(st,dr,p,u);
    if(k<=p && k>=st) qs(st,p);
    else if(k>=u && k<=dr) qs(u,dr);
    else return;
}


int main()
{
    int n, i, j;
    //in>>n>>k;
    fscanf(in, "%d%d", &n, &k);
    for(int i=1;i<=n; ++i) //in>>v[i];
    {
        fscanf(in, "%d", &v[i]);
    }
    srand(time(0));
    /*
    for (i = n; i >= 1; i--)
    {
        j = rand() % i + 1;
        swap(v[i], v[j]);
    }
    */
    qs(1,n);
    out<<v[k];
    return 0;
}