Submission

Status:

[PPPP-][SSSSS][SSSSSSSSSS]

Subtask/Task Score:

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

Score: 0

User: sulinx

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-02-14 10:48:53

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

#define ll long long

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    cin >> n;
    
    vector<pair<ll, ll>> ranges(n);
    ll sm = 0;
    
    for (auto &[l, r] : ranges) {
        cin >> l >> r;
        r--;
        sm += (r - l + 1);
    }
    
    if (sm == 1) return cout << ranges[0].first, 0;

    vector<pair<ll, int>> events;
    for (auto [l, r] : ranges) {
        events.push_back({l, 1});
        events.push_back({r + 1, -1});
    }
    sort(events.begin(), events.end());
    
    ll cur = 0, active = 0;
    ll target = (sm + 1) / 2;
    
    for (int i = 0; i < events.size(); ) {
        ll pos = events[i].first;
        
        while (i < events.size() && events[i].first == pos) {
            active += events[i].second;
            i++;
        }
        
        if (active == 0 || i == events.size()) continue;
        
        ll next_pos = (i < events.size()) ? events[i].first : pos + 1;
        ll len = next_pos - pos;
        
        if (cur + active * len >= target) {
            ll need = target - cur;
            cout << pos + (need - 1) / active;
            return 0;
        }
        
        cur += active * len;
    }
}