Cod sursa(job #2616368)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 18 mai 2020 11:12:13
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include<bits/stdc++.h>
using namespace std;
FILE*in=fopen("sdo.in","r");
FILE*out=fopen("sdo.out","w");
int n,k,v[3000003],i,it1,it2,p=1,x,y;
int main()
{
    fscanf(in,"%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&v[i]);
    }
    for(i=1;i<=n;i++)
    {
        swap(v[i],v[rand()%i+1]);
    }
    x=1;
    y=n;
    while(p!=k)
    {
        p=x;
        it1=x;
        it2=y;
        while(it1<=it2)
        {
                while(v[it2]>v[p])
                {
                    it2--;
                }
                swap(v[it2],v[p]);
                p=it2;
                it2--;
                if(it1>it2)
                {
                    break;
                }
                while(v[it1]<v[p])
                {
                    it1++;
                }
                swap(v[it1],v[p]);
                p=it1;
                it1++;
        }
        if(p>k)
        {
            y=p-1;
        }
        else
        {
            x=p+1;
        }
    }
    fprintf(out,"%d",v[p]);
}