Cod sursa(job #2670547)

Utilizator CraiuAndreiCraiu Andrei David CraiuAndrei Data 10 noiembrie 2020 10:36:59
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");
/**
1 10 4 13 7 6 11 14
7 10 4 13 1 6 11 14
6 4 1 7 10 13 11 14
      p
4 6 1
1 4 6
  p
*/

int a[3000003], n, k;

int Pivot(int st, int dr)
{
    int i, j, piv;
    j = (st + dr) / 2;
    swap(a[j], a[st]);
    piv = a[st];
    j = st;
    for (i = st + 1; i <= dr; i++)
        if (a[i] <= piv)
        {
            j++;
            swap(a[i], a[j]);
        }
    swap(a[st], a[j]);
    return j;
}

int Cauta(int st, int dr)
{
    int p = Pivot(st, dr);
    if (p == k) return a[p];
    if (p < k) return Cauta(p + 1, dr);
    return Cauta(st, p - 1);
}

void Citire()
{
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
        fin >> a[i];
}

int main()
{
    Citire();
    fout << Cauta(1, n);
    return 0;
}