Cod sursa(job #3177006)

Utilizator RZV_BestBirsan Razvan RZV_Best Data 28 noiembrie 2023 10:59:18
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 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 pivot = rand() % (dr - st + 1) + st;
    int x = a[pivot];
    swap(a[dr], a[pivot]);
    int j = st - 1;
    for (int i = st; i <= dr; i++)
        if (a[i] <= x)
            swap(a[++j], a[i]);
    return j;
}

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;
}