Pagini recente » Cod sursa (job #1895145) | Cod sursa (job #832872) | Cod sursa (job #2642117) | Cod sursa (job #3160438) | Cod sursa (job #609328)
Cod sursa(job #609328)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int a[3000010],n,i,k;
int part(int a[3000010],int st, int sf) {
int i=st,j=sf,p=a[st+(rand()%(sf-st+1))],aux;
while (1) {
while (a[i]<p) i++;
while (a[j]>p) j--;
if (i<j) {
aux=a[i];a[i]=a[j];a[j]=aux;
}
else return j;
}
return 0;
}
void alg_sdo(int a[3000010],int st,int sf,int k) {
if (st==sf) return;
int q=part(a,st,sf);
int t=q-st+1;
if (t>=k) alg_sdo(a,st,q,k);
else alg_sdo(a,q+1,sf,k-t);
}
int main() {
srand(time(NULL));
f >> n >> k;
for (i=1;i<=n;i++) f >> a[i];
alg_sdo(a,1,n,k);
g << a[k] << '\n';
f.close();g.close();
return 0;
}