Cod sursa(job #2507351)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 10 decembrie 2019 07:55:12
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <stdio.h>
#include <cstdlib>
#include <ctime>
#include <ctype.h>

using namespace std;

FILE *fin = fopen("sdo.in", "r");
FILE *fout = fopen("sdo.out", "w");

#define BUF_SIZE 4096
char buf[BUF_SIZE];
int pos = BUF_SIZE;

inline char getChar(FILE *f) {
  if (pos == BUF_SIZE) {
    fread(buf, 1, BUF_SIZE, f);
    pos = 0;
  }
  return buf[pos++];
}

inline int read(FILE *f) {
  int result = 0;
  char c;
  do {
    c = getChar(f);
  } while (!isdigit(c));

  do {
    result = 10 * result + c - '0';
    c = getChar(f);
  } while (isdigit(c));

  return result;
}

int n, k, sol;
int v[3000001];
int ver = 1;

void quicksort(int st, int dr){
    int aux, i = st, j = dr, p;
    p = st + rand()%(dr - st + 1);
    int pivot = v[p];
    while(i <= j){
        while(v[i] < pivot)
            i++;
        while(v[j] > pivot)
            j--;
        if(i <= j){
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            i++;
            j--;
        }
    }
    if(st < j && j >= k)
        quicksort(st, j);
    else if(i < dr)
        quicksort(i, dr);
}

int main(){
    int i, j;

    srand(time(0));

    n = read(fin);
    k = read(fin);
    for(i = 1; i <= n; i++)
        v[i] = read(fin);

//    fscanf(fin, "%d %d", &n, &k);
//    for(i = 1; i <= n; i++)
//        fscanf(fin, "%d", &v[i]);

    quicksort(1, n);

    fprintf(fout, "%d", v[k]);

    fclose(fin);
    fclose(fout);
    return 0;
}