Intervals

原创 2013年12月04日 13:23:47

Problem 60: Intervals


Time Limit:1 Ms| Memory Limit:10 MB
Difficulty:0

[Problem] [Rank]

Description

There is given the series of n closed intervals [ai; b i], where i=1,2,...,n. The sum of those intervals may berepresented as a sum of closed pairwise non−intersecting intervals. The task is to find such representation with the minimal number of intervals. The intervals of this representation should be written in the output file in acceding order. We say that the intervals [a; b] and [c; d] are in ascending order if, and only if a <= b < c <= d.
Task
Write a program which:
.reads from the std input the description of the series of intervals,
.computes pairwise non−intersecting intervals satisfying the conditions given above, 
.writes the computed intervals in ascending order into std output

Input

In the first line of input there is one integer n, 3 <= n <= 50000. This is the number of intervals. In the (i+1)−st line, 1 <= i <= n, there is a description of the interval [ai; bi] in the form of two integers ai and bi separated by a single space, which are respectively the beginning and the end of the interval,1 <= ai <= bi <= 1000000.

Output

The output should contain descriptions of all computed pairwise non−intersecting intervals. In each line should be written a description of one interval. It should be composed of two integers, separated by a single space, the beginning and the end of the interval respectively. The intervals should be written into the output in ascending order.

Sample Input

5
5 6
1 4
10 10
6 9
8 10

Sample Output

1 4
5 10

思路:找最大不重合空间, 一道水题, 一时没思路, 浪费了好长时间。。。, 先按每

个区间的start排序, 然后不断扩充区间(end), 如果start > end则输出, 注意最后要

把最后一个输出(没有start去比了)。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>

using namespace std;

typedef struct Elem
{
	int start;
	int end;
}elem;

elem temp[50001];

bool cmp(elem a, elem b)
{
	if(a.start != b.start)
	{
		return a.start < b.start;
	}
	else
	{
		return a.end < b.end;
	}
}

int main()
{
	int n, i;
	scanf("%d", &n);
	for(i = 0; i < n; i++)
	{
		scanf("%d%d", &temp[i].start, &temp[i].end);	
	}	
	sort(temp, temp+n, cmp);
	elem t = temp[0];
	for(i = 1; i < n; i++)
	{
		if(temp[i].start > t.end)
		{
			printf("%d %d\n", t.start, t.end);
			t = temp[i];
		}
		else
		{
			if(temp[i].end > t.end)
			{
				t.end = temp[i].end;
			}
		}
	}
	printf("%d %d\n", t.start, t.end);
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

rac intervals

  • 2014-05-26 23:28
  • 985KB
  • 下载

POJ 3225 Help with Intervals 【线段树】

题目链接 segment tree题意给定集合S,S最初是空集。现对其进行一些操作:与一个集合求交、并、补、对称差。用区间表示出最终的S分析这个题有许多注意的地方(当然可能是我写法不太好),肝了一上...

ZOJ 3953 Intervals

这题其实就是在算最大不重叠区间数的升级版。 首先讲一下最大不重叠区间数如何求; 将所有区间按y小到大排序。 然后按顺序放区间,线上记录ansr(最右下标值) 在放一个新的区间的时候,判断此区间的...

zoj 1508 | poj 1201 Intervals

类型:差分约束 题目:http://poj.org/problem?id=1201 来源:Southwestern Europe 2002 思路:设S[i]是集合z中小于等于i的元素的个数 (...

Merge Intervals And Insert Interval -- Leetcode

leetcode 中的两个集合操作题目: Merge Intervals , Insert Interval

poj1716 Integer Intervals 贪心

#include #include #include using namespace std; struct node { int left,right; }c[10005]; bool c...

leetcode435. Non-overlapping Intervals

435. Non-overlapping IntervalsGiven a collection of intervals, find the minimum number of intervals ...

POJ 3680 Intervals (最大费用最大流)

大意:给定n,k分别代表n段线段,累加的线段不会超过k次。问最后所以的累加最大和是多少。思路:最大费用最大流,刚上来建图弄错了。建成了原点与每个点都有流量为K,费用为0的边。这样显然是错的。那么就需要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)