Submission

Status:
[PP-SS][SSSSS][SSSSSSSSSS]

Score: 0

User: Cmoss9

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

Language: cpp

Time: 0.003 second

Submitted On: 2025-03-18 22:12:15

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

int main() {
    int n; 
    cin >> n;

    vector<pair<int, int>> ranges(n);
    int max_val = 0; 
    int total_books = 0; 
   
    for (int i = 0; i < n; i++) {
        cin >> ranges[i].first >> ranges[i].second;
        total_books += (ranges[i].second - ranges[i].first); 
        max_val = max(max_val, ranges[i].second); 
    }
    vector<int> freq(max_val + 1, 0);

    for (int i = 0; i < n; i++) {
        for (int j = ranges[i].first; j < ranges[i].second; j++) {
            freq[j]++;
        }
    }

    int half = total_books / 2;
    int accumulated = 0;
    int median = -1;
    // cout << total_books << '\n';
    if (total_books % 2 == 0) {
        int first_middle = -1, second_middle = -1;
        for (int i = 0; i <= max_val; i++) {
            accumulated += freq[i];
            if (accumulated >= half && first_middle == -1) {
                first_middle = i;
            }
            if (accumulated > half) {
                second_middle = i;
                break;
            }
        }
        //cout << first_middle << ' ' << second_middle << '\n';
        median = (first_middle + second_middle) / 2;
    } 
    else {
        for (int i = 0; i <= max_val; i++) {
            accumulated += freq[i];
            if (accumulated >= half) {
                median = i;
                break;
            }
        }
    }
    cout << median << endl;
}