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;
}


poj 1089 Intervals

poj 1089 Intervals 贪心 Description There is given the series of n closed intervals [ai; bi], where i=...

2014湘潭全国邀请赛I题 Intervals /POJ 3680 / 在限制次数下取有权区间使权最大/小问题(费用流)

先说POJ3680:给n个有权(权   思路:       限制的处理:s-->开始流量为k,要求总权最大,即费用最大,所以费用取负,最小费用最大流即可。对于输入区间[a,b]:w,添加边:a-->b...

【POJ 1201】 Intervals(差分约束系统)

【POJ 1201】 Intervals(差分约束系统) 1716的升级版 把原本固定的边权改为不固定。 Intervals Time Limit: 2000MS   Memory Li...

POJ 3225 Help with Intervals 【线段树】

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

ZOJ 3953 Intervals

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

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...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Intervals
举报原因:
原因补充:

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