考え方(いもす法)
Editorial - Tokio Marine & Nichido Fire Insurance Programming Contest 2022(AtCoder Beginner Contest 256)ログインしている人数をいもす法で求められる.
- ログイン人数が0→1以上となるところが区間の左端
- ログイン人数が1以上→0となるところが区間の右端
回答例
N = int(input()) LR = [list(map(int, input().split())) for _ in range(N)] num = 2 * 10 ** 5 acc = [0] * (num + 1) for l, r in LR: acc[l] += 1 acc[r] -= 1 for i in range(num): acc[i + 1] += acc[i] ans = [] for i in range(num): x, y = acc[i], acc[i + 1] if x == 0 and y > 0: l = i + 1 if x > 0 and y == 0: r = i + 1 ans.append([l, r]) for l, r in ans: print(l, r)