#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Bld
{
int64_t l, r;
bool operator<(const Bld & rhs) const
{
return l < rhs.l;
}
};
static int64_t n, m, s, iResult, iMinDist;
static bool fFound;
static vector<Bld> vBlds;
static vector<Bld> vConsolidated;
static void ReadData()
{
for (int i = 0; i < m; ++i)
{
Bld bld;
cin >> bld.l >> bld.r;
vBlds.push_back(bld);
}
}
static void Consolidate()
{
sort(vBlds.begin(), vBlds.end());
vConsolidated.push_back(vBlds[0]);
for (int i = 1; i < m; ++i)
{
Bld & bld = vBlds[i];
if (bld.l == vConsolidated.back().r + 1)
{
vConsolidated.back().r = bld.r;
continue;
}
vConsolidated.push_back(bld);
}
}
static inline void UpdateResult(int64_t x)
{
if (x < 1 || x > n)
return;
if (!fFound)
{
fFound = true;
iResult = x;
iMinDist = abs(x - s);
return;
}
int64_t iCandidate = abs(x - s);
if (iCandidate < iMinDist)
{
iResult = x;
iMinDist = iCandidate;
}
}
static void FindResult()
{
fFound = false;
for (const Bld & bld : vConsolidated)
{
UpdateResult(bld.l - 1);
UpdateResult(bld.r + 1);
}
}
int main()
{
cin >> n >> m >> s;
ReadData();
Consolidate();
FindResult();
cout << iResult;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Bld { int64_t l, r; bool operator<(const Bld & rhs) const { return l < rhs.l; } }; static int64_t n, m, s, iResult, iMinDist; static bool fFound; static vector<Bld> vBlds; static vector<Bld> vConsolidated; static void ReadData() { for (int i = 0; i < m; ++i) { Bld bld; cin >> bld.l >> bld.r; vBlds.push_back(bld); } } static void Consolidate() { sort(vBlds.begin(), vBlds.end()); vConsolidated.push_back(vBlds[0]); for (int i = 1; i < m; ++i) { Bld & bld = vBlds[i]; if (bld.l == vConsolidated.back().r + 1) { vConsolidated.back().r = bld.r; continue; } vConsolidated.push_back(bld); } } static inline void UpdateResult(int64_t x) { if (x < 1 || x > n) return; if (!fFound) { fFound = true; iResult = x; iMinDist = abs(x - s); return; } int64_t iCandidate = abs(x - s); if (iCandidate < iMinDist) { iResult = x; iMinDist = iCandidate; } } static void FindResult() { fFound = false; for (const Bld & bld : vConsolidated) { UpdateResult(bld.l - 1); UpdateResult(bld.r + 1); } } int main() { cin >> n >> m >> s; ReadData(); Consolidate(); FindResult(); cout << iResult; } |
English