Submission

Status:

[PPPPP][PPPPP][PPPPPPPPPP]

Subtask/Task Score:

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

Score: 100

User: kittipos

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

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-04 15:56:48

#include <iostream>
#include <limits>
#include <vector>

using namespace std;

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

  int n;
  cin >> n;

  vector<pair<int, int>> books;

  books.resize(n);

  int smallest = numeric_limits<int>::max();
  int biggest = 0;
  int page_count = 0;
  for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    books[i].first = a;
    books[i].second = b;

    smallest = min(smallest, a);
    smallest = min(smallest, b);

    biggest = max(biggest, a);
    biggest = max(biggest, b);

    page_count += b - a;
  }

  int left = smallest - 1;
  int right = biggest - 1;
  int target = page_count / 2;
  // cout << "target: " << target << endl;
  while (left + 1 < right) {
    int center = (right + left) / 2;
    int center_count = 0;
    for (int i = 0; i < books.size(); i++) {
      if (center < books[i].first) {
        continue;
      } else if (center < books[i].second) {
        center_count += center - books[i].first + 1;
      } else {
        center_count += books[i].second - books[i].first;
      }
    }

    // cout << "count: " << center_count << endl;

    if (center_count >= target) {
      right = center;
    } else {
      left = center;
    }

    // if (center_count < target) {
    //     left = center;
    //     right = center;
    // } else {
    // }
  }

  cout << right;

  return 0;
}