Pagini recente » Cod sursa (job #2349298) | Cod sursa (job #2973643) | Cod sursa (job #600425) | Cod sursa (job #1499012) | Cod sursa (job #3252909)
#include <fstream>
using namespace std;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
int v[3000001];
void schimba(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void interclaseaza(int* a1, int* b1, int* a2, int* b2)
{
int* cnt1 = a1;
int* cnt2 = a2;
int* vec = new int[b2 - a1];
bool bool1 = true;
bool bool2 = true;
while (cnt1 < b1 || cnt2 < b2)
{
if (cnt1 == b1)
{
bool1 = false;
}
if (cnt2 == b2)
{
bool2 = false;
}
while (cnt1 < b1 && (!bool2 || (*cnt1 <= *cnt2)))
{
vec[cnt1 - a1 + (cnt2 - a2)] = *cnt1;
cnt1 ++;
}
while (cnt2 < b2 && (!bool1 || (*cnt1 > *cnt2)))
{
vec[(cnt1 - a1) + (cnt2 - a2)] = *cnt2;
cnt2 ++;
}
}
memcpy(a1, vec, (b2 - a1) * sizeof(int));
delete[] vec;
}
void mergeSort(int* a, int* b)
{
if (b - a == 1)
{
return;
}
else if (b - a == 2)
{
if (*a > *(b - 1))
{
schimba(*a, *(b - 1));
}
}
else
{
int* mij = a + (b - a) / 2;
mergeSort(a, mij);
mergeSort(mij, b);
interclaseaza(a, mij, mij, b);
}
}
int main()
{
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i ++)
{
cin >> v[i];
}
mergeSort(v + 1, v + n + 1);
cout << v[k];
return 0;
}