Pagini recente » Cod sursa (job #113306) | Cod sursa (job #2039616) | Cod sursa (job #793964) | Cod sursa (job #2109812) | Cod sursa (job #1238216)
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int v[3000010],l[3000010],r[3000010];
int st,dr,mid,k,n,i;
int sdo (int x, int y) {
int poz=x+rand()%(dr-st+1);
int st=0;
int dr=0;
for (int i=x;i<=y;i++) {
if (v[i]<=v[poz])
l[++st]=i;
else
r[++dr]=i;
}
for (int i=x;i<=y;i++) {
if (i<=st)
v[i]=v[l[i]];
else
v[i]=v[r[i-st]];
}
return st;
}
int main () {
srand(time(0));
fin>>n>>k;
for (i=1;i<=n;i++)
fin>>v[i];
st=1;dr=n;
while (st<=dr) {
mid=sdo(st,dr);
if (mid==k) {
fout<<v[mid]<<"\n";
return 0;
}
if (mid>k)
dr=mid-1;
else
st=mid+1;
}
return 0;
}