Submission
Status:
[PPPPP][PPPPP][PPPPPPPPPP]
Subtask/Task Score:
{20/20}{30/30}{50/50}
Score: 100
User: House123
Problemset: ห้องสมุดเมือง 3M
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-04 13:55:56
#include <bits/stdc++.h>
using namespace std;
int N;
//find either if it's left or right
//
bool check_LR(int x,long long ans_want_index,int b[],int a[]){
int index_book =0;
for(int i = 0; i < N;i++){
if(x >= b[i]){
index_book += b[i] - a[i];
} else if(x >= a[i]){
index_book += x - a[i]+1;
}
}
return index_book >= ans_want_index;// right
}
int main(){
int ans;
cin >> N;
int start[N+3];
int end[N+3];
int mn_start = 2e7+5;
int mx_end = -1;
long long total_book = 0;
for(int i = 0; i < N;i++){
cin >> start[i] >> end[i];
total_book += (end[i] - start[i]);
//Acquire interval
mx_end = max(mx_end, end[i]);
mn_start = min(mn_start, start[i]);
}
const long long ans_want_index = (total_book)/2;
int left = mn_start;
int right = mx_end;
while(left <= right){
int mid = left + (right - left)/2;
bool index = check_LR(mid,ans_want_index,end,start);
if(index){
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << ans;
return 0;
}