Cod sursa(job #2669904)

Utilizator Luca_Miscocilucainfoarena Luca_Miscoci Data 8 noiembrie 2020 13:51:35
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
using namespace std;
#define NMAX 3000000
int v[NMAX + 5];
int readInt(FILE* fin){
  char ch;
  int nr = 0;
  ch = fgetc( fin );
  while (!(ch >= '0' && ch <= '9'))
    ch = fgetc( fin );
  do{
    nr = nr * 10 + ch - '0';
    ch = fgetc( fin );
  }while (ch >= '0' && ch <= '9');
  return nr;
}
void nth(int begin, int end,int ind){
  int pivot = v[(begin + end) /  2];
  int b = begin, e = end;
  while (v[b] < pivot)
    b++;
  while (v[e] > pivot)
    e--;
  while(b < e){
    swap(v[b] , v[e]);
    do
      b++;
    while(v[b] < pivot);
    do
      e--;
    while(v[e] > pivot);
  }
  if (begin < e && ind <= e)
    nth(begin, e,ind);
  if (e + 1 < end)
    nth(e + 1, end, ind);
}
int main(){
  FILE *fin,*fout;
  fin = fopen("sdo.in","r");
  fout = fopen("sdo.out","w ");
  int n, k, i;
  fscanf(fin ,"%d%d", &n ,&k);
  for(i = 0; i < n; i++){
    v[i] = readInt(fin);
  }
  nth(0,n - 1, --k);
  fprintf( fout,"%d" ,v[k]);
  return 0;
}