Cod sursa(job #3237861)

Utilizator tsg38Tsg Tsg tsg38 Data 13 iulie 2024 19:44:32
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

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

const int DIM = 3e6;

int v[DIM];

int qselect( int l, int r, int k ) {
  if ( l >= r ) {
	return v[k];
  }
  int p = v[l + rng() % (r - l + 1)];
  int st = l, dr = r;

  while ( v[st] < p ) ++st;
  while ( v[dr] > p ) --dr;

  while ( st < dr ) { 
    swap(v[st], v[dr]);

    while ( v[++st] < p );
    while ( v[--dr] > p );
  }

  if ( k <= dr ) {
    return qselect(l, dr, k);
  }
  return qselect(dr + 1, r, k);
}

int main() {
  ios_base::sync_with_stdio(0);
  fin.tie(0);
  int n, k;

  fin >> n >> k;
  for ( int i = 0; i < n; ++i ) {
	fin >> v[i];
  }
  fout << qselect(0, n - 1, k - 1);
  fin.close();
  fout.close();
  return 0;
}