Cod sursa(job #2484339)
Utilizator | Meriniuc Razvan- Dumitru meriniucr | Data | 30 octombrie 2019 23:08:43 |
---|---|---|---|
Problema | Statistici de ordine | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.02 kb |
#include <fstream>
#include <iostream>
#include <vector>
int
f(std::vector <int>& v,
int b,
int e,
int k)
{
while (true)
{
int i = b + 1;
int j = e;
while (i <= j)
{
while (i <= j and v[i] <= v[b])
{
i++;
}
while (i <= j and v[b] <= v[j])
{
j--;
}
if (i < j)
{
std::swap(v[i], v[j]);
}
}
std::swap(v[j], v[b]);
if (j - b == k)
{
return v[j];
}
else if (j - b > k)
{
e = j - 1;
}
else
{
b = i;
k += -j + b - 1;
}
}
}
int main()
{
std::ifstream in("sdo.in");
std::ofstream out("sdo.out");
int N;
int k;
in >> N;
in >> k;
std::vector <int> v(N);
for (int i = 0; i < N; i++)
{
in >> v[i];
}
out << f(v, 0, N - 1, k - 1);
return 0;
}