Cod sursa(job #2198280)

Utilizator Mihnea_BranzeuMihnea Branzeu Mihnea_Branzeu Data 24 aprilie 2018 10:04:29
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int v[100001],k;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
void partitie3(int v[],int st,int dr,int &p,int &u)
{
    int pivot=v[dr];
    int 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 v[],int st,int dr)
{
    if(st>=dr)
        return;
    int p,u;
    partitie3(v,st,dr,p,u);
    if(k>=st && k<=dr)  qs(v,st,p);
    else if(k>=u && k<=dr)   qs(v,u,dr);
    else return;
}
int main()
{
    int n,i,j;
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>v[i];
    srand(time(0));
    for(int i=n;i>=1;i--)
        {
          j=rand()%i+1;
          swap(v[i],v[j]);
        }
    qs(v,1,n);
    fout<<v[k];
    return 0;
}