POJ 1089

いもす法をする
[a,a]みたいな区間を忘れないようにする

#include <cstdio>
#include <algorithm>
using namespace std;

int s[1000002];
int single[1000002];
int main(){
	int N;
	int mi = 1000002, ma = 0;
	scanf("%d", &N);
	for(int i = 0; i < N; i++){
		int a, b;
		scanf("%d %d", &a, &b);
		mi = min(a, mi); ma = max(b, ma);
		s[a]++;
		s[b]--;
		if(a == b) single[a] = 1;
	}
	int p = -1;
	for(int i = mi - 1; i < ma + 2; i++){
		s[i] = s[i-1] + s[i];
		if(s[i] >= 1 && p == -1)
			p = i;
		if(s[i] == 0 && p != -1){
			printf("%d %d\n", p , i);
			p = -1;
		}else if(s[i] == 0 && single[i] == 1){
			printf("%d %d\n", i, i);
		}
	}
}