Cod sursa(job #2440835)

Utilizator ShayTeodor Matei Shay Data 19 iulie 2019 14:24:00
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.89 kb
#include <bits/stdc++.h>

inline void print(int n) {
	char snum[65];
	int i = 0;
	do {
		snum[i++] = n % 10 + '0';
		n /= 10;
	} while (n);

	--i;

	while (i >= 0) {
		putchar(snum[i--]);
	}

	putchar('\n');
}

inline int read() {
	int n = 0;
	char c = getchar_unlocked();

	while (!('0' <= c && c <= '9')) {
		c = getchar_unlocked();
	}

	while ('0' <= c && c <= '9') {
		n = (n << 3) + (n << 1) + (c - '0');
		c = getchar_unlocked();
	}

	return n;
}

// int partition(int a[], int left, int right, int x) {
// 	int i;

// 	for (i = left; i < right ; ++i) {
// 		if (a[i] == x) {
// 			break;
// 		}
// 	}

// 	std::swap(a[i], a[right]);

// 	i = left;

// 	for (int j = left ; j <= right - 1 ; ++j) {
// 		if (a[j] <= x) {
// 			std::swap(a[i], a[j]);
// 			++i;
// 		}
// 	}

// 	std::swap(a[i], a[right]);
// 	return i;
// }

// int find_median(int a[], int n) {
// 	std::sort(a, a + n);
// 	return a[n >> 2];
// }

// int kth_element(int a[], int left, int right, int k) {
// 	if (k > 0 && k <= right - left + 1) {
// 		int n = right - left + 1;
// 		int i, median[(n + 4) / 5];

// 		for (i = 0 ; i < n / 5 ; ++i) {
// 			median[i] = find_median(a + left + 5 * i, 5);
// 		}

// 		if (5 * i < n) {
// 			median[i] = find_median(a + left + 5 * i, n % 5);
// 			++i;
// 		}

// 		int meds = (i == 1) ? median[i - 1] : kth_element(median, 0, i - 1, i / 2);
// 		int position = partition(a, left, right, meds);

// 		if (position - left == k - 1) {
// 			return a[position];
// 		}

// 		if (position - left > k - 1) {
// 			return kth_element(a, left, position - 1, k);
// 		}

// 		return kth_element(a, position + 1, right,  k - position + left - 1);
// 	}

// 	return INT_MAX;
// }



int main() {
	freopen("sdo.in", "r", stdin);
	freopen("sdo.out", "w", stdout);
	int n, k;
	n = read(); k = read(); int a[n];

	for (int i = 0 ; i < n ; ++i) {
		a[i] = read();
	}
	std::nth_element(a, a + k , a + n + 1);
	print(a[k]);
	return 0;
}