Submission
Status:
[PPPPP][-SSSS][SSSSSSSSSS]
Subtask/Task Score:
{20/20}{0/30}{0/50}
Score: 20
User: Kx
Problemset: ห้องสมุดเมือง 3M
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-17 08:31:02
#include <bits/stdc++.h>
using namespace std;
int n, res = 0;
vector<pair<int, int>> p, g;
void getp(int l, int r) {
if(g.empty()) g.push_back({l, r});
bool add = true;
for(auto &x : g) {
if(l >= x.first && r <= x.second) {
add = false;
return;
} else if(l >= x.first && r >= x.second) {
add = false;
x.second = r;
} else if(l <= x.first && r <= x.second) {
add = false;
x.first = l;
} else if(l <= x.first && r >= x.second) {
add = false;
x.first = l, x.second = r;
}
}
if(add) {
g.push_back({l, r});
}
return;
}
int main() {
cin >> n;
p.resize(n);
for(int i = 0; i < n; ++i) {
cin >> p[i].first >> p[i].second;
}
sort(p.begin(), p.end());
for(auto x : p) {
getp(x.first, x.second - 1);
}
int sz = 0;
for(auto x : g) {
sz += (x.second - x.first + 1);
}
sz /= 2;
for(auto x : g) {
int cur_sz = x.second - x.first + 1;
if(sz <= cur_sz && x.second - x.first > 0) {
res = x.first + sz - 1;
break;
} else if(sz <= cur_sz && n == 1){
res = x.first + sz;
break;
} else {
sz -= cur_sz;
}
}
cout << res << '\n';
return 0;
}