Pagini recente » Cod sursa (job #2136949) | Cod sursa (job #827641) | Clasament Teme ACM Unibuc 2013 | Cod sursa (job #1904929) | Cod sursa (job #650366)
Cod sursa(job #650366)
#include<stdio.h>
#include<time.h>
#include<fstream>
#include <cstdlib>
using namespace std;
#define MAX_N 3000005
ifstream in ("sdo.in");
ofstream out ("sdo.out");
int A[MAX_N], n, k;
void citire (){
in >> n >> k;
for(int i=1; i<=n; ++i)
in >> A[i];
}
int divizeaza (int s, int d) {
int i=s-1, j=d-1, piv=A[s+(rand()%(d-s+1))];
while(i<j) {
while(A[i]<piv)
i++;
while(A[j]>piv)
j--;
if(i<j)
swap (A[i], A[j]);
else return j;
}
return 0;
}
void select (int s, int d, int k) {
if(s<d){
int q=divizeaza(s,d);
int t=q-s+1;
if(t>=k)
select(s,q,k);
else
select(q+1,d,k-t);
}
}
int main() {
srand(time(NULL));
citire();
select(1,n,k);
out<<A[k]<<"\n";
return 0;
}