Cod sursa(job #1023989)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 7 noiembrie 2013 23:01:50
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
using namespace std;

void swap(int &a, int &b) {
  int temp = a;
  a = b;
  b = temp;
}

int partition(vector<int> &v, const int &left, const int &right, const int &pivot) {
  int pivot_value = v[pivot];
  swap(v[pivot], v[right]);
  int store_index = left;
  for (int i = left; i < right; ++i) {
    if (v[i] < pivot_value) {
      swap(v[i], v[store_index]);
      ++store_index;
    }
  }
  swap(v[right], v[store_index]);
  return store_index;
}

int quickSelect(vector<int> &v, const int &left, const int &right, const int &k) {
  if (left == right) {
    return v[left];
  }
  int pivot = rand() % (right - left + 1) + left;
  pivot = partition(v, left, right, pivot);

  if (k <= pivot) {
    return quickSelect(v, left, pivot, k);
  } else {
    return quickSelect(v, pivot + 1, right, k - pivot);
  }
}

int main() {
  int N, K;
  vector<int> v;
  v.push_back(1337);

  ifstream in("sdo.in");
  in >> N >> K;
  for (int i = 0; i < N; ++i) {
    int val;
    in >> val;
    v.push_back(val);
  }
  in.close();

  ofstream out("sdo.out");
  out << quickSelect(v, 1, N, K);
  out.close();

  return 0;
}