Pagini recente » Cod sursa (job #498978) | Cod sursa (job #2063760) | Cod sursa (job #2239816) | Cod sursa (job #1625439) | Cod sursa (job #1238229)
#include <fstream>
#include <time.h>
#include <stdlib.h>
#include <algorithm>
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()%(y-x+1);
int st=0;
int dr=0;
int p;
for (int i=x;i<=y;i++) {
if (v[i]<=v[poz]){
l[++st]=v[i];
if (v[i]==v[poz])
p=st;
}else
r[++dr]=v[i];
}
swap(l[p],l[st]);
for (int i=x,j=1;i<=y;i++,j++) {
if (j<=st)
v[i]=l[j];
else
v[i]=r[j-st];
}
return x+st-1;
}
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[k]<<"\n";
return 0;
}
if (mid>k)
dr=mid-1;
else
st=mid+1;
}
return 0;
}