Pagini recente » Monitorul de evaluare | Istoria paginii runda/dinamica/clasament | Cod sursa (job #2616783) | Cod sursa (job #1127182) | Cod sursa (job #2184264)
#include <fstream>
#include <stdlib.h>
#include <ctime>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int n,i,k,p,v[3000010];
int poz (int st,int dr){
int x = st + rand()%(dr-st+1);
swap (v[st],v[x]);
int dst = 0;
int ddr = -1;
while (st < dr){
if (v[st] > v[dr]){
swap (v[st],v[dr]);
int aux = dst;
dst = -ddr;
ddr = -aux;
}
st += dst;
dr += ddr;
}
return st;
}
int cauta (int st,int dr,int k){
if (st == dr)
return v[st];
p = poz (st,dr);
if (p == k)
return v[k];
if (p > k)
return cauta (st,p-1,k);
else
return cauta (p+1,dr,k);
}
int main (){
fin>>n>>k;
for (i=1;i<=n;i++)
fin>>v[i];
srand (time(0));
fout<<cauta (1,n,k);
return 0;
}