Pagini recente » Cod sursa (job #747056) | Cod sursa (job #3210844) | Cod sursa (job #2575552) | Cod sursa (job #3202332) | Cod sursa (job #3176259)
#include <fstream>
#include <algorithm>
#include <vector>
#define ll long long
using namespace std;
const int NMAX = 3e6;
int x[NMAX + 1];
ll manhattan(int a, int b, int c, int d)
{
return abs(a - c) + abs(d - b);
}
int kth_element(int v[], int st, int dr, int k)
{
//punem toate elementele mai mici decat v[pivot] in stanga, iar restul in dreapta
int i, pivot = (st + dr) / 2;
int val = v[pivot];
swap(v[pivot], v[st]);
int aux = st;
for (i = st; i <= dr; i++)
if (v[i] < val)
{
swap(v[aux], v[i]);
aux++;
}
int dist = aux - st + 1;
if (dist == k)
return val;
if (dist > k)
return kth_element(v, st, aux - 1, k);
return kth_element(v, aux + 1, dr, k - dist);
}
signed main()
{
ifstream cin("sdo.in");
ofstream cout("sdo.out");
//elementul median de pe x si de pe y
int n, i, k;
cin >> n >> k;
for (i = 1; i <= n; i++)
cin >> x[i];
cout << kth_element(x, 1, n, k);
}