Pagini recente » Autentificare | Statistici Tognel Filip (Filip_Toganel) | Monitorul de evaluare | Cod sursa (job #880533)
Cod sursa(job #880533)
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
using namespace std;
class OrderStatistics
{
int N, K;
int set[3000000];
public:
OrderStatistics(string inFile, string outFile)
{
read(inFile);
solve(0, N - 1, K);
write(outFile);
}
private:
void read(string inFile)
{
ifstream fin(inFile.c_str());
fin >> N >> K;
for (int i = 0; i < N; ++i)
{
fin >> set[i];
}
fin.close();
}
void solve(int i, int j, int p)
{
int l, m, f = i + p - 1;
int v = set[i + rand() % (j - i + 1)];
// Do the swappings
for (l = i, m = j; l < m;)
{
for (; l < m && set[l] <= v; ++l);
for (; l < m && set[m] > v; --m);
swap(set[l], set[m]);
}
if (j - i <= 1)
{
return;
}
// Go to the last element
for (l = i; set[l] <= v; ++l);
if (f < l)
{
return solve(i, l - 1, p);
}
else
{
return solve(l, j, p - l + i);
}
}
void write(string outFile)
{
ofstream fout(outFile.c_str());
fout << set[K - 1];
fout.close();
}
};
int main()
{
OrderStatistics orderStatistics("sdo.in", "sdo.out");
}