Cod sursa(job #1536503)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 26 noiembrie 2015 11:45:32
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

FILE *fin,*fout;
int n,k;
int a[3000010];

int ord(int st,int en,int piv)
{
    if(st<en)
    {
        int s=a[piv],d=a[piv];
        int p1=st-1,p2=en+1;
        while(p1!=p2)
        {
            if(s==a[piv]&&p1!=piv)
            {
                p1++;
                if(s<a[p1])
                {
                    s=a[p1];
                }
            }
            else if(d==a[piv]&&p2!=piv)
            {
                p2--;
                if(d>a[p2])
                {
                    d=a[p2];
                }
            }
            else
            {
                swap(a[p1],a[p2]);
                s=a[piv];
                d=a[piv];
            }
        }
        ord(st,piv-1,(st+piv-1)/2);
        /*for(int i=1;i<=n;i++)
        {
            fprintf(fout,"%d ",a[i]);
        }
        fprintf(fout,"\n");*/
        ord(piv+1,en,(piv+1+en)/2);
        /*for(int i=1;i<=n;i++)
        {
            fprintf(fout,"%d ",a[i]);
        }
        fprintf(fout,"\n");*/
    }
}

int main()
{
    fin=fopen("sdo.in","r");
    fout=fopen("sdo.out","w");

    fscanf(fin,"%d %d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&a[i]);
    }
    int s=a[k+1],d=a[k+1];
    int p1=1,p2=n;
    while(p1!=p2)
    {
        if(s==a[k+1]&&p1!=k+1)
        {
            p1++;
            if(s<a[p1])
            {
                s=a[p1];
            }
        }
        else if(d==a[k+1]&&p2!=k+1)
        {
            p2--;
            if(d>a[p2])
            {
                d=a[p2];
            }
        }
        else
        {
            swap(a[p1],a[p2]);
            s=a[k+1];
            d=a[k+1];
        }
    }
    /*for(int i=1;i<=n;i++)
    {
        fprintf(fout,"%d ",a[i]);
    }
    fprintf(fout,"\n");*/
    ord(1,k+1,(k+2)/2);
    fprintf(fout,"%d",a[k]);
}