#P2057. 区间.填空题

区间.填空题

题目描述

给出 nn 个区间,请合并所有重叠的区间,并把合并后的区间按升序输出。

注意:当且仅当 ab<cda \le b \lt c \le d 时,区间 [a,ba,b] 、[c,dc,d] 才是升序

输入格式

第一行只有一个数 nn ( 3n500003 \le n \le 50000 ),代表区间数。

接下来 nn 行有两个数 ai,bia_i,b_i,之间用一个空格隔开,分别表示区间 [aia_i,bib_i]的起始和结束 ( 1aibi10000001 \le a_i \le b_i \le 1000000)

输出格式

计算出的所有区间,每行写一个区间,每行只有两个数,分别是区间起始和结束,之间用一个空格分开。记住必须是按升序输出。

样例

5
5 6
1 4
10 10
6 9
8 10
1 4
5 10

完善程序

#include<bits/stdc++.h>
using namespace std;
struct zone
{
	int l,r;
}x[50005];
填空(1) cmp(zone i, zone j)
{
	return i.l<j.l||(i.l==j.l&&i.r<j.r);
}
int n,R,L;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&x[i].l,&x[i].r);
	
	sort(x+1,填空(2),填空(3));
	x[填空(4)].l = 2000000; //这个地方很巧妙的 
	
	L = x[1].l;
	R = x[1].r;
	for(int i=填空(5);i<=n;i++)
	{
		if(x[i].l<=R)
			R = 填空(6);
		else
		{
			printf("%d %d\n",L,R);
			L = 填空(7);
			R = 填空(8);
		}
	}

	return 0;
}

填空(1):{{ input(1) }}

填空(2):{{ input(2) }}

填空(3):{{ input(3) }}

填空(4):{{ input(4) }}

填空(5):{{ input(5) }}

填空(6):{{ input(6) }}

填空(7):{{ input(7) }}

填空(8):{{ input(8) }}