Cod sursa(job #1830393)

Utilizator andreiulianAndrei andreiulian Data 16 decembrie 2016 18:03:08
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdlib.h>
#include<time.h>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<set>
#include<climits>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#define mp make_pair
#define pb push_back
#define ff(i, x, n) for (int i = x; i <= n; ++i)
#define dd(i) cout << i <<'\n'
	#define READ_FROM_FILE
using namespace std;
int v[3000005], n, k;

int q(int s, int d) {
	int r, m = s, i;
	srand(time(NULL));
	r = rand() % (d - s + 1) + s;
	swap(v[s], v[r]);
	for (i = s + 1; i <= d; ++i) {
		if (v[i] < v[s]) {
			swap(v[i], v[++m]);
		}
	}
	swap(v[s], v[m]);
	if (m == k) {
		return v[m];
	}
	if (m < k) {
		return q(m + 1, d);
	} else {
		return q(s, m - 1);
	}
	return -1;
}

int main(){
	#ifdef READ_FROM_FILE
		ifstream in("sdo.in");
		#define cin in
	#endif
	srand(time(NULL));
	cin >> n >> k;
	ff(i, 1, n) {
		cin >> v[i];
	}
	ofstream out("sdo.out");
	out << q(1, n) << '\n';
}