Submission

Status:

[PPPPP][PPPPP][PPPPPPPPPP]

Subtask/Task Score:

{20/20}{30/30}{50/50}

Score: 100

User: sulinx

Problemset: ห้องสมุดเมือง 3M

Language: cpp

Time: 0.003 second

Submitted On: 2026-02-14 11:04:59

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<pair<int, int>> ranges;
    int globalMax = 0;
    int globalMin = INT_MAX;
    long long totalPoints = 0;
    
    for (int i = 0; i < n; i++) {
        int start, end;
        cin >> start >> end;
        
        globalMax = max(globalMax, end);
        globalMin = min(globalMin, start);
        ranges.push_back({start, end});
        
        totalPoints += (long long)(end - start);
    }
    
    long long targetCount = totalPoints / 2;
    
    int left = globalMin;
    int right = globalMax;
    int medianValue = 0;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;
        
        long long pointsUpToMid = 0;
        for (auto& range : ranges) {
            int start = range.first;
            int end = range.second;
            
            long long count = min(end, mid + 1) - start;
            if (count > 0) {
                pointsUpToMid += count;
            }
        }
        
        if (pointsUpToMid >= targetCount) {
            medianValue = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    
    cout << medianValue << endl;
    
    return 0;
}