Cod sursa(job #3349593)

Utilizator darius_cimbruDarius Cimbru darius_cimbru Data 31 martie 2026 23:23:32
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;

//

int a[3000001];
int n,k;

int partitie(int l, int r)
{
    int pivot=a[r], i=l-1;
    for(int j=l;j<r;j++)
    {
        if(a[j]<=pivot)
        {
            i++;
            int t=a[i];a[i]=a[j];a[j]=t;
        }
    }
    int t=a[i+1];a[i+1]=a[r];a[r]=t;
    return i+1;
}

int quickselect(int l, int r, int k)
{
    if(l==r) return a[l];
    int p=partitie(l,r);
    int rank=p-l+1;
    if(rank==k) return a[p];
    else if(k<rank) return quickselect(l,p-1,k);
    else return quickselect(p+1,r,k-rank);
}

int main()
{
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    fin>>n>>k;
    for(int i=0;i<n;i++) fin>>a[i];
    fout<<quickselect(0,n-1,k);
    return 0;
}