Submission
Status:
[PP-SS][SSSSS][SSSSSSSSSS]
Score: 0
User: dwad2
Problemset: ห้องสมุดเมือง 3M
Language: cpp
Time: 0.002 second
Submitted On: 2025-03-21 00:08:55
#include <bits/stdc++.h>
using namespace std;
pair<int, int> check(vector<pair<int, int>> &list, int x) {
int sumleft = 0, sumright = 0;
for(int i = 0; i < list.size(); i++) {
if(list[i].first < x) {
if(list[i].second <= x) sumleft += (list[i].second - list[i].first);
else sumleft += (x - list[i].first);
}
}
for(int i = 0; i < list.size(); i++) {
if(list[i].second > x) {
if(list[i].first > x) sumright += (list[i].second - list[i].first);
else sumright += (list[i].second - x - 1);
}
}
return {sumleft, sumright};
}
int search(vector<pair<int, int>> &list, int left, int right, int maxsum) {
int mid = (left + right) / 2;
//cout << mid << endl;
if(left == mid) {
if(check(list, right).first > (maxsum / 2) - 1) return mid;
else return right;
}
else if(check(list, mid).first < (maxsum / 2) - 1) return search(list, mid, right, maxsum);
else return search(list, left, mid, maxsum);
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
int s, e;
long long maxsum = 0;
vector<pair<int, int>> list(n);
for(int i = 0; i < n; i++) {
cin >> s >> e;
maxsum += (e - s);
list[i] = {s, e};
}
cout << search(list, 0, 2e7, maxsum);
return 0;
}