Cod sursa(job #1194948)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 5 iunie 2014 14:27:41
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#define N 3000010
using namespace std;
int n,k,i,a[N];
void SDO(int,int);
int main()
{
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    srand(time(NULL));
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    SDO(1,n);
    return 0;
}
void SDO(int L,int R)
{
    if(L==R){printf("%d",a[L]);return;}
    int LL=L,RR=R,V,aux;
    aux=((rand()<<14)|rand());
    aux=L+aux%(R-L+1);
    V=a[aux];
    do
    {
      while(a[LL]<V)LL++;
      while(a[RR]>V)RR--;
      if(LL<=RR){aux=a[LL];a[LL]=a[RR];a[RR]=aux;LL++;RR--;}
    }while(LL<=RR);
    if(L<=k&&k<=RR)SDO(L,RR);
    else SDO(LL,R);
}