Pagini recente » Cod sursa (job #2620067) | Cod sursa (job #1695668) | Cod sursa (job #1990922) | Cod sursa (job #2294046) | Cod sursa (job #1049071)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void exchg(int&a, int&b){
int aux = a;a=b;b=aux;
}
int pivot(vector<int>& v, int from, int to) {
int pivotPos = from + (rand() % (to-from+1));
int aux = v[from];
v[from] = v[pivotPos];
v[pivotPos] = aux;
pivotPos = from;
for(int i=from+1; i<=to;i++) {
if(v[i] < v[pivotPos]) {
exchg(v[pivotPos], v[pivotPos+1]);
if(i!=pivotPos+1)
exchg(v[pivotPos], v[i]);
pivotPos++;
}
}
return pivotPos;
}
void mysort(vector<int>& v, int from, int to) {
if(from>=to) return;
int k = pivot(v, from, to);
mysort(v, from, k-1);
mysort(v, k+1, to);
}
void kthElement(vector<int>& v,int from, int to, int k) {
if(from>to)
return;
int m = pivot(v, from, to);
int dist = m-from;
if(dist > k) {
kthElement(v, from, m-1, k);
}
if (dist < k) {
kthElement(v, m+1, to, k-dist-1);
}
}
int main() {
int n,k, x;
ifstream in("sdo.in");
ofstream out("sdo.out");
in>>n>>k;
vector<int> v(n);
for(int i=0;i<n;i++) {
in>>x;v[i] = x;
}
kthElement(v,0,v.size()-1,k-1);
out<<v[k-1];
return 0;
}