Submission

Status:

[PPPPP][PPPPP][PPPPPPPPPP]

Score: 100

User: njoop

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

Language: cpp

Time: 0.002 second

Submitted On: 2025-03-09 23:39:23

#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;

int a[105]= {0}, b[105] ={0};
int N;
int C(int X, int D) {
    return X-D+1;
}

pii B(int X) {
    int BC = 0;
    int R = 0;
    for (int i=0; i<N; i++) {
        int CV = C(X, a[i]);
        if (0 < CV && CV <= b[i]-a[i]) BC++;
        if (CV > b[i]-a[i]) {
            R += b[i]-a[i];
        } else if (0 < CV && CV <= b[i]-a[i]) {
            R += CV;
        }
    }
    return make_pair(R-BC+1, R);
}
int main() {
    cin >> N;
    int P = 0;
    for (int i=0; i<N; i++) {
        cin >> a[i] >> b[i];
        P += b[i]-a[i];
    }
    if(P == 1) {
        cout << a[0];
        return 0;
    }
    P /= 2;
    int L = 0;
    int R = 40000000;
    int M;
    //cout << P << "\n";
    while (L <= R) {
        M = L + (R-L)/2;
        //cout << M << " ";
        auto [RX, RY] = B(M);
        //cout << RX << " " << RY << "\n";
        if (RX>RY) {
            if (P<=RY) {
                R = M-1;
            } else {
                L = M+1;
            }
        } else if (RX<=P && P <=RY && RX<=RY) {
            cout << M;
            return 0;
        } else if (RY < P) {
            L = M+1;
        } else if (P < RX) {
            R = M-1;
        }
    }
    return 0;
}