Pagini recente » Cod sursa (job #149164) | Cod sursa (job #45578) | Cod sursa (job #1938021) | Cod sursa (job #1894660) | Cod sursa (job #2925555)
#include <fstream>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int NMAX = 3000000;
int k;
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)
{
if (st == dr)
return v[k];
else
{
srand(time(NULL));
int indexPivot = st + rand() % (dr - st + 1);
int pivot = v[indexPivot];
swap(v[indexPivot], 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);
else
return sol(stSwap + 1, dr);
}
}
int main()
{
ofstream out("sdo.out");
int n;
n = input.getInt();
k = input.getInt();
for (int i = 1; i <= n; i++)
v[i] = input.getInt();
out << sol(1, n) << '\n';
return 0;
}