Submission

Status:

[PPPPP][PPPPP][PPPPPPPPPP]

Subtask/Task Score:

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

Score: 100

User: sakurajima

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

Language: cpp

Time: 0.004 second

Submitted On: 2026-09-30 17:32:50

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

vector<pair<long long, long long>> libaries;

long long count_le(long long x) {

    long long count = 0;
    for (auto [X,Y] : libaries) {

        if (x < X) {
            count += 0;
        }
        else if (x < Y) {
            count += x - X + 1;
        }
        else {
            count += Y - X;
        }

    }

    return count;

}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n; 
    cin >> n;

    long long total_books = 0;
    for (int i = 0; i < n; i++) {
        long long X, Y;
        cin >> X >> Y;
        
        libaries.push_back({X,Y});
        total_books += Y - X;
    }

    if (total_books == 1) {
        cout << libaries[0].first << '\n';
        return 0;
    }

    long long target = total_books / 2;

    long long left = 0;
    long long right = 19999999;
    long long soln = -1;

    while (left <= right) {

        long long mid = (left + right) / 2;
        if (count_le(mid) >= target) {
            soln = mid;
            right = mid - 1;
        }
        else {
            left = mid + 1;
        }

    }

    cout << soln;

}