Pagini recente » Cod sursa (job #1898033) | Cod sursa (job #1017454) | Cod sursa (job #3326234) | Cod sursa (job #2774614) | Cod sursa (job #3346577)
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
/*void printv(long long v[], int n) {
for (int i = 0; i < n; i++) cout << v[i] << ' ';
cout << '\n';
} */
/*void insertionSort(long long v[], int n) {
for (int i = 1; i < n; i++) {
long long key = v[i];
int j = i - 1;
while (j >= 0 && key < v[j]) {
v[j + 1] = v[j];
j--;
}
v[j + 1] = key;
}
} */
int partition(long long v[], int left, int right) {
int i = left + 1;
int j = right;
int random_index = left + rand() % (right - left + 1);
swap(v[random_index], v[left]);
while (i <= j) {
while (i <= j && v[i] < v[left]) i++;
while (i <= j && v[j] > v[left]) j--;
if (i <= j)
swap(v[i++], v[j--]);
}
swap(v[left], v[j]);
return j;
}
/*void quick_sort(long long *v, int left, int right) {
if (left < right) {
int pivot_position = partition(v, left, right);
quick_sort(v, left, pivot_position - 1);
quick_sort(v, pivot_position + 1, right);
}
} */
long long quick_select(long long v[], int left, int right, int k) {
if (left == right) return v[left];
int pivot_position = partition(v, left, right);
if (pivot_position == k)
return v[pivot_position];
if (k < pivot_position)
return quick_select(v, left, pivot_position - 1, k);
return quick_select(v, pivot_position + 1, right, k);
}
int main() {
if (!fin.is_open()) {
fin.clear();
fin.open("cmake-build-debug/sdo.in");
if (!fin.is_open()) {
cout << "Error: I cannot find sdo.in!" << '\n';
return 1; // Stop the program early
}
}
ios::sync_with_stdio(false);
cin.tie(nullptr);
srand(time(nullptr));
int n = 0, k = 0;
fin >> n >> k;
long long *v = new long long[n + 1];
for (int i = 1; i <= n; i++) fin >> v[i];
if (k >= 1 && k <= n)
fout << quick_select(v, 1, n, k);
delete[] v;
fin.close();
fout.close();
return 0;
}