Cod sursa(job #3348865)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 24 martie 2026 14:57:15
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <time.h>
#include <random>
#include <iostream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");

const int Nmax = 3000005;
int findKth( int v[], int st, int dr, int k)
{
    cout << " st = " << st << " dr = " << dr << "  ";
    if ( st == dr )
        return v[st];
    int pos = st + rand() % (dr - st + 1);
    cout << "pos = " << pos << "     ";
    int pivot = v[pos], i, j;
    j = st;
    for ( i = st; i <= dr; ++i )
        if ( v[i] <= pivot )
        {
            swap(v[i], v[j]);
            ++j;
        }
    cout << "partitia s a facut pe poz " << j - 1 << "\n";
    if ( j - 1 - st + 1 >= k )
        return findKth( v, st, j - 1, k );
    return findKth(v, j, dr, k - (j - st));


}
int v[Nmax];
int main()
{
    srand(time(0));
    int n, i, k;
    fin >> n >> k;
    for ( i = 1; i <= n; ++i )
        fin >> v[i];

    fout << findKth(v, 1, n, k);
    return 0;
}