1236:區間合併 2020-12-27

lybc2019發表於2020-12-27

1236:區間合併
時間限制: 1000 ms         記憶體限制: 65536 KB
【題目描述】
給定 n 個閉區間 [ai,bi],其中i=1,2,...,n。任意兩個相鄰或相交的閉區間可以合併為一個閉區間。例如,[1,2] 和 [2,3] 可以合併為 [1,3],[1,3] 和 [2,4] 可以合併為 [1,4],但是[1,2] 和 [3,4] 不可以合併。
我們的任務是判斷這些區間是否可以最終合併為一個閉區間,如果可以,將這個閉區間輸出,否則輸出no。
【輸入】
第一行為一個整數n,3≤n≤50000。表示輸入區間的數量。
之後n行,在第i行上(1≤i≤n),為兩個整數 ai 和 bi ,整數之間用一個空格分隔,表示區間 [ai,bi](其中 1≤ai≤bi≤10000)。
【輸出】
輸出一行,如果這些區間最終可以合併為一個閉區間,輸出這個閉區間的左右邊界,用單個空格隔開;否則輸出 no。
【輸入樣例】
5
5 6
1 5
10 10
6 9
8 10
【輸出樣例】
1 10

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int book[10005];
int main(int argc, char *argv[])
{
	int n,a,b,i,j;
	scanf("%d",&n);
	int lt=10005,rt=-5;
	for(i=1;i<=n;i++){
		scanf("%d %d",&a,&b);
		for(j=a;j<b;j++)
			if(book[j]==0) book[j]=1;
		if(a<lt)lt=a;
		if(b>rt)rt=b;	
	}
	for(i=lt;i<rt;i++)
		if(book[i]==0){
			printf("no\n");return 0;
		}
	printf("%d %d\n",lt,rt);
	return 0;
}

 

相關文章