Problem:
I: 破壊 (Ravage)

サンタクロースは、街のイルミネーションに引っかかり、壊した。

イルミネーションにはN個の電球があり、$i$ 番目の電球は電圧が $A_i$ 以上 $B_i$ 以下のときにしか付かなくなってしまった。

電圧はイルミネーションのどこでも同じにする必要がある。

電圧を調節することで、最大いくつの電球を同時に光らせることができるか求めよ。

入力

1 行目には整数 $N$ が与えられる。

続く $N$ 行のうち $i$ 行目には $A_i, B_i$ が空白区切りで与えられる。

出力

同時に光らせることができる電球の個数の最大値を出力せよ。

制約

$N$ は $1$ 以上 $100 \ 000$ 以下の整数

$A_1, A_2, A_3, \dots, A_N$ は $1$ 以上 $1 \ 000 \ 000 \ 000$ 以下の整数

$B_1, B_2, B_3, \dots, B_N$ は $1$ 以上 $1 \ 000 \ 000 \ 000$ 以下の整数

すべての電球 $i$ について、$A_i \leq B_i$ を満たす

入力例1

4
1 4
3 6
2 7
5 8

出力例1

3

電圧が $5$ や $3.14$ のときに $3$ つの電球がつきます。

入力例2

2
1 2
2 3

出力例2

2

Solution in C++14 (judge verdict: Accepted)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

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

    vector<int> v;
    // sentinel
    v.push_back(0);
    v.push_back(1000000001);

    int a[n], b[n];
    for(int i = 0; i < n; i++){
        cin >> a[i] >> b[i];
        v.push_back(a[i]);
        v.push_back(b[i]);
    }

    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    int len = v.size();

    auto l = [&](int val)->int{
        return lower_bound(v.begin(),v.end(),val)-v.begin();
    };
    auto r = [&](int val)->int{
        return upper_bound(v.begin(),v.end(),val)-v.begin();
    };

    vector<int> cnt(len, 0);
    for(int i = 0; i < n; i++){
        cnt[l(a[i])]++;
        cnt[r(b[i])]--;
    }

    int ans = 0;
    for(int i = 1; i < len; i++){
        cnt[i] += cnt[i-1];
        ans = max(ans, cnt[i]);
    }

    cout << ans << endl;

    return 0;
}