Cod sursa(job #3176257)

Utilizator AswVwsACamburu Luca AswVwsA Data 26 noiembrie 2023 21:53:02
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#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()
{

    //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);
}