Cod sursa(job #2183512)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 23 martie 2018 11:07:13
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <ctime>
#include <stdlib.h>
#include <iostream>

using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, v[3000001], i,p,k;

int rez(int st, int dr)
{
    int dst=0, ddr=-1,aux;
    while(st!=dr)
    {
        if(v[st]>v[dr])
        {
            aux=v[st];
            v[st]=v[dr];
            v[dr]=aux;
            aux=dst;
            dst=-ddr;
            ddr=-aux;
        }
        st+=dst;
        dr+=ddr;
    }
    return st;
}

void quicksort(int st, int dr)
{
    int p=rez(st, dr);
    if(k<=p-1)
        quicksort(st, p-1);
    else
        if(k==p)
        {
            fout<<v[k];
            return;
        }
        else
            quicksort(p+1, dr);
}

int main()
{
    srand(time(0));
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=n;i>1;i--)
    {
        p=1+(((long long)rand()*rand()))%(i-1);
        swap(v[i], v[p]);
    }
    quicksort(1, n);
    fin.close();
    fout.close();
    return 0;
}