Pagini recente » Cod sursa (job #1049933) | Cod sursa (job #817166) | Cod sursa (job #191672) | Cod sursa (job #1004641) | Cod sursa (job #2925549)
#include <fstream>
using namespace std;
const int NMAX = 3000000;
int v[1 + NMAX];
class Parser
{
private:
static const int BUFF_SIZE = 5000000;
ifstream in;
char buffer[BUFF_SIZE];
int posBuff;
public:
Parser(char* file)
{
in = ifstream(file);
posBuff = BUFF_SIZE - 1;
ios_base::sync_with_stdio(false);
in.tie(NULL);
}
int getInt()
{
int rez = 0;
while (!('0' <= buffer[posBuff] && buffer[posBuff] <= '9'))
{
posBuff++;
if (posBuff == BUFF_SIZE)
{
posBuff = 0;
in.read(buffer, BUFF_SIZE);
}
}
while ('0' <= buffer[posBuff] && buffer[posBuff] <= '9')
{
rez = rez * 10 + buffer[posBuff] - '0';
posBuff++;
if (posBuff == BUFF_SIZE)
{
posBuff = 0;
in.read(buffer, BUFF_SIZE);
}
}
return rez;
}
};
Parser input("sdo.in");
int sol(int st, int dr, int k)
{
if (st == dr)
return v[k];
else
{
int pivot = v[dr];
int stSwap = st - 1;
for (int i = st; i < dr; i++)
{
if (v[i] < pivot)
{
stSwap++;
swap(v[stSwap], v[i]);
}
}
stSwap++;
swap(v[stSwap], v[dr]);
if (k == stSwap)
return v[stSwap];
else if (k < stSwap)
return sol(st, stSwap - 1, k);
else
return sol(stSwap + 1, dr, k);
}
}
int main()
{
ofstream out("sdo.out");
int n, k;
n = input.getInt();
k = input.getInt();
for (int i = 1; i <= n; i++)
v[i] = input.getInt();
out << sol(1, n, k) << '\n';
return 0;
}