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 (judge verdict: Accepted)

// AOJ 2923: Ravage
// 2019.2.18 bal4u

#include <stdio.h>
#include <stdlib.h>

#define gc() getchar()

int in()
{
	int n = 0, c = gc();
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

typedef struct { int v; int f; } S;
S s[200002];

int cmp(const void *a, const void *b)
{
	int r = ((S *)a)->v - ((S *)b)->v;
	if (r == 0) return ((S *)b)->f - ((S *)a)->f;
	return r;
}

int main()
{
	int N, i, j, max, cnt;

	N = in();
	for (i = N, j = 0; i--; j++) {
		s[j].v = in(), s[j].f = 1;
		s[++j].v = in();
	}
	N <<= 1;
	qsort(s, N, sizeof(S), cmp);
	max = cnt = 0;
	for (i = 0; i < N; i++) {
		if (s[i].f) {
			if (++cnt > max) max = cnt;
		} else cnt--;
	}
	printf("%d\n", max);
	return 0;
}