Pagini recente » Cod sursa (job #2352803) | Cod sursa (job #2552439) | Cod sursa (job #2585442) | Cod sursa (job #2653792) | Cod sursa (job #2623258)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[3000001], n, k;
int partitie(int v[], int st, int dr)
{
int pivot = dr, i = st;
for(int j = st; j < dr; j++)
if(v[j] < v[pivot])
{
swap(v[j], v[i]);
i++;
}
swap(v[pivot], v[i]);
return i;
}
int random_pivot(int v[], int st, int dr)
{
int n = rand();
int pivot = st + n % (dr - st + 1);
swap(v[pivot], v[dr]);
return partitie(v, st, dr);
}
int quick_select(int v[], int st, int dr, int k)
{
if(st == dr)
return v[st];
int pivot = random_pivot(v, st, dr);
int poz = pivot - st + 1;
if(k <= poz) ///verificam care partitie il contine pe k
return quick_select(v, st, pivot, k);
else
return quick_select(v, pivot + 1, dr, k - poz);
}
int main()
{
f >> n >> k;
for(int i = 1; i <= n; i++)
f >> v[i];
g << quick_select(v, 1, n, k);
return 0;
}
/**
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
const int NMAX = 3000001;
int v[NMAX], n, k;
int main()
{
f >> n >> k;
for(int i = 1; i <= n; i++)
f >> v[i];
nth_element(v + 1, v + k, v + n + 1);
g << v[k];
return 0;
}
*/