好久没用sort函数了,有点生疏了,。。。还是得多练习啊。。。
1.题意:给定很多间隔,合并间隔,使得合并后间隔最小。
5//5间隔
5 6
1 4
10 10
6 9
8 10
2.思路:先用sort函数按照间隔前段由小到大排序,然后判断是否可以合并,
3.代码:
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define max 0x7fffffff;
struct node
{int start;int end;
} a[50000];
int cmp(struct node a,struct node b)
{return a.start<b.start;
}
int main()
{int n,ta,tb;scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d%d",&a[i].start,&a[i].end);}sort(a,a+n,cmp);ta=a[0].start;tb=a[0].end;a[n].start=max;a[n].end=max;for(int i=1; i<=n; i++){if(tb<a[i].start){printf("%d %d\n",ta,tb);ta=a[i].start;tb=a[i].end;}/*else if(tb>=a[i].end){tb=a[i].end;}*/else if(tb>=a[i].start&&tb<=a[i].end){tb=a[i].end;}}return 0;
}