Cod sursa(job #3177002)

Utilizator RZV_BestBirsan Razvan RZV_Best Data 28 noiembrie 2023 10:57:14
Problema Statistici de ordine Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int b[3000000],a[3000000],o;
int  part(int st,int dr)
{

    int m=(st+dr)/2;
    int dist=0;
    swap(a[st],a[m]);
    while(st<=dr)
    {
        if(a[st]>a[dr])
        {
            swap(a[st],a[dr]);
            dist=-dist+1;
        }
        st+=dist;
        dr+=dist-1;
    }
    return dr;
}
int quicksort(int st,int dr)
{
int poz=part(st,dr);
if(o==poz)
return a[o];
else if(o<poz)
    return quicksort(st,poz-1);
return quicksort(poz+1,dr);
}
void ic(int st,int mij,int dr)
{
    int i,j,k,t;
    for(i=st;i<=dr;i++)
    b[i]=a[i];
    i=st,j=mij+1,k=st-1;
    while(i<=mij&&j<=dr)
    {
        if(b[i]<b[j])a[++k]=b[i++];
        else a[++k]=b[j++];
    }
    for(t=i;t<=mij;t++)a[++k]=b[t];
        for(t=j;t<=dr;t++)a[++k]=b[t];
}
void divide(int st,int dr)
{
    if(st<dr)
    {
    int mij=(st+dr)/2;
    divide(st,mij);
    divide(mij+1,dr);
    ic(st,mij,dr);
    }
}
int main()
{
    int n;
    f>>n>>o;
    for(int i=1;i<=n;i++)
    f>>a[i];
    g<<quicksort(1,n);
    return 0;
}