Cod sursa(job #3325094)

Utilizator TeodorVTeodorV TeodorV Data 24 noiembrie 2025 18:41:21
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

const string NUMEFISIER="sdo";
ifstream fin(NUMEFISIER+".in");
ofstream fout(NUMEFISIER+".out");

void part_3(int v[], int st, int dr, int& p1, int& p2){
    int pivot=rand()%(dr-st+1)+st;
    swap(v[pivot], v[dr]);

    p1=st; p2=dr-1;
    int i=st;
    while(i<=p2)
    {
        if(v[i]==v[dr])
        {
            i++;
        }
        else if(v[i]<v[dr])
        {
            swap(v[p1++], v[i++]);
        }
        else swap(v[p2--], v[i]);
    }
    swap(v[++p2], v[dr]);
}

void quickSort(int v[], int st, int dr, int k)
{
    if(st>=dr)
        return;

    int p1,p2;
    ///st->p1-1, mai mici ca pivotul
    ///p1->p2, egale cu pivotul
    ///p2+1->dr mai mari ca pivotul
    part_3(v, st, dr, p1, p2);

    if(k<p1)
        quickSort(v, st, p1-1, k);
    else if(k<=p2)
        return;
    else quickSort(v, p2+1, dr, k);
}

int main()
{
    int n,k;
    fin>>n>>k;
    int* v=new int[n];
    for(int i=0; i<n; i++) fin>>v[i];
    quickSort(v, 0, n-1, k-1);
    fout<<v[k-1];
    delete[] v;
    return 0;
}