Cod sursa(job #3326420)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 28 noiembrie 2025 20:03:21
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
//https://infoarena.ro/problema/sdo

//#pragma GCC optimize("O3")   
//#pragma GCC optimize("Ofast") 
//#pragma GCC optimize("fast-math") 
//#pragma GCC optimize("unroll-loops") 
//#pragma GCC optimize("inline")  
//#define _USE_MATH_DEFINES
//#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <fstream>
//#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

const int NRMAX = 3000000;

int v[NRMAX];

void quicksort_k(int st, int dr, int k)
{
    int piv = v[st + rand() % (dr - st + 1)];
    int i, j;

    for (i = st; v[i] < piv; ++i);
    for (j = dr; v[j] > piv; --j);

    while (i < j)
    {
        swap(v[i], v[j]);

        ++i; for (; v[i] < piv; ++i);
        --j; for (; v[j] > piv; --j);
    }

    if (st < j && k <= j)
        quicksort_k(st, j, k);
    if (j + 1 < dr)
        quicksort_k(j + 1, dr, k);
}

int main()
{
	//ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	int n, k, i;

	fin >> n >> k;
	for (i = 0; i < n; ++i)
		fin >> v[i];

    quicksort_k(0, n - 1, k);

	/*for (i = 0; i < n; ++i)
		cout << v[i] << " ";*/

	fout << v[k - 1] << "\n";

	return 0;
}