95 lines
1.4 KiB
C++
95 lines
1.4 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <fstream>
|
|
|
|
std::vector<std::vector<int>> vec;
|
|
|
|
bool test(int num)
|
|
{
|
|
int prev = 0;
|
|
int count = 0;
|
|
|
|
for (size_t i = 0; i < vec.size(); i++)
|
|
{
|
|
for (size_t j = 0; j < vec[i].size(); j++)
|
|
{
|
|
if (vec[i][j] <= num)
|
|
continue;
|
|
|
|
if (count == 0)
|
|
{
|
|
prev = vec[i][j];
|
|
count++;
|
|
}
|
|
else if (count == 1)
|
|
{
|
|
if (prev != vec[i][j])
|
|
return false;
|
|
count = 0;
|
|
}
|
|
}
|
|
if (count > 0)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
int alg(int start, bool s, int end, bool e)
|
|
{
|
|
if (end - start == 1)
|
|
{
|
|
if (s)
|
|
return start;
|
|
else if (e)
|
|
return end;
|
|
}
|
|
int middle = (start + end) / 2;
|
|
bool m = test(middle);
|
|
|
|
if (m == e)
|
|
{
|
|
return alg(start, s, middle, m);
|
|
}
|
|
else if (s == m)
|
|
{
|
|
return alg(middle, m, end, e);
|
|
}
|
|
|
|
return middle;
|
|
}
|
|
|
|
int start_alg(int num)
|
|
{
|
|
bool s = test(0);
|
|
bool e = test(num);
|
|
return alg(0, s, num, e);
|
|
}
|
|
|
|
int main(int argc, char const *argv[])
|
|
{
|
|
std::ifstream ifile(argv[1]);
|
|
int size = 0;
|
|
ifile >> size;
|
|
|
|
int num = 0;
|
|
int max = 0;
|
|
|
|
vec.emplace_back(std::vector<int>());
|
|
vec.emplace_back(std::vector<int>());
|
|
|
|
for (size_t i = 0; i < 2; i++)
|
|
{
|
|
for (size_t j = 0; j < size; j++)
|
|
{
|
|
ifile >> num;
|
|
if (num > max)
|
|
max = num;
|
|
vec[i].push_back(num);
|
|
}
|
|
}
|
|
|
|
int fin = start_alg(max);
|
|
std::cout << fin << "\n";
|
|
|
|
return 0;
|
|
} |