Cod sursa(job #2861700)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 4 martie 2022 12:03:37
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<list>
#include<iterator>
using namespace std;
FILE*in=fopen("sdo.in","r");
FILE*out=fopen("sdo.out","w");
const int NMAX=3000007;
int n,k,i,a,r;
list<int> v;
list<int>::iterator it;
list<list<int>::iterator> q;
list<list<int>::iterator>::iterator itt;
void sol(list<int> &ve,int p)
{
    q.clear();
    int ra=rand()%ve.size(),pas=0,el;
    for(it=ve.begin();it!=ve.end();it++)
    {
        if(pas==ra)
        {
            el=*it;
            break;
        }
        pas++;
    }
    int ct=0;
    for(it=ve.begin();it!=ve.end();it++)
    {
        if(*it<el)
        {
            ct++;
        }
    }
    if(ct==p-1)
    {
        r=el;
    }
    else if(ct>p-1)
    {
        for(it=ve.begin();it!=ve.end();it++)
        {
            if(*it>=el)
            {
                q.push_back(it);
            }
        }
        for(itt=q.begin();itt!=q.end();itt++)
        {
            ve.erase(*itt);
        }
        sol(ve,p);
    }
    else
    {
        for(it=ve.begin();it!=ve.end();it++)
        {
            if(*it<el)
            {
                q.push_back(it);
            }
        }
        for(itt=q.begin();itt!=q.end();itt++)
        {
            ve.erase(*itt);
        }
        sol(ve,p-1-ct);
    }
}
int main()
{
    fscanf(in,"%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&a);
        v.push_back(a);
    }
    sol(v,k);
    fprintf(out,"%d",r);
}