Cod sursa(job #1183730)

Utilizator tudi98Cozma Tudor tudi98 Data 10 mai 2014 00:45:46
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define dim 3000005
using namespace std;

int n,a[dim],k;

int part(int l,int r){
    
    int pivot,i,j;
    i=l-1;
    j=r+1;
    pivot = a[l+rand()%(r-l+1)];
    while(1){
        do{i++;}while(a[i]<pivot && i<r);
        do{j--;}while(a[j]>pivot && j>l);
        if(i<j)
            swap(a[i],a[j]);
        else return j;
    }
}

void sdo(int l,int r,int k){
    
    int q,t;
    if(l==r) return;
    q=part(l,r);
    t=q-l+1;
    if(t<k){        //daca se afla in dreapta 
        sdo(q+1,r,k-t);
    }               //altfel daca se afla in stanga
    else sdo(l,q,k);       
}

int main(){
    
    ifstream f("sdo.in");
    ofstream g("sdo.out");
 
    f >> n >> k;
    
    srand(time(NULL));
    
    for(int i=1;i<=n;i++)
        f >> a[i];
    
    sdo(1,n,k);
    
    g << a[k];    
}