Cod sursa(job #3162592)

Utilizator adelinapetreAdelina Petre adelinapetre Data 29 octombrie 2023 14:30:20
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include<ctime>

using namespace std;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
int v[3000005];
int kth_element(int st,int dr,int k)
{
    if(st==dr)
        return v[st];
    int i,j,poz;
    i=st;j=dr;
    //pivot=v[dr];
    swap(v[st],v[dr]);
    while(i<=j)
    {
        while(i<=j && v[i]<=v[st])
            poz=i, i++;
        while(i<=j && v[j]>v[st])
            j--;
        if(i<=j)
        {
             swap(v[i],v[j]);
             poz=i;
             i++; j--;
        }
    }
    swap(v[st],v[poz]);
    if(poz-st+1==k)
        return v[poz];
    else if(poz-st+1>k)
        return kth_element(st,poz-1,k);
    else
        return kth_element(poz+1,dr,k-(poz-st+1));
}
int main()
{
    int n,k,i;
    cin>>n>>k;
    for(i=1; i<=n; i++)
        cin>>v[i];
    srand(time(0));
    int sol=kth_element(1,n,k);
    cout<<sol;
    return 0;
}