Pagini recente » Cod sursa (job #2475638) | Cod sursa (job #3188091) | Cod sursa (job #290190) | Cod sursa (job #2398974) | Cod sursa (job #2599614)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
int nums[3000005];
int sdo(int lft, int rgt);
int position(int lft, int rgt);
int main()
{
fin >> n >> k;
for(int i = 1; i <= n; ++i) fin >> nums[i];
fout << sdo(1, n);
return 0;
}
int sdo(int lft, int rgt){
int p = position(lft, rgt);
if(k == p) return nums[p];
else if(k < p) return sdo(lft, p - 1);
else return sdo(p + 1, rgt);
}
int position(int lft, int rgt){
int pl = 0, pr = 1;
int pos = rand() % (rgt - lft + 1) + lft;
swap(nums[lft], nums[pos]);
while(lft <= rgt){
if(nums[lft] > nums[rgt]){
swap(pl, pr);
swap(nums[lft], nums[rgt]);
}
lft += pl;
rgt -= pr;
}
return lft;
}