Merge Intervals |
||||||
|
||||||
Description |
||||||
Given a collection of intervals, merge all overlapping intervals. For example, Given: [1,3],[2,6],[8,10],[15,18]; after meger: [1,6],[8,10],[15,18]. |
||||||
Input |
||||||
There are multiple test cases. For each test case: Line 1: This line contains an integer n indicating the number of intervals. Line 2..n+1: Each line contains a pair of integers a and b, indicating the interval [a, b]. 1<=n<=100,000 1<=a <= b<=1,000,000,000 |
||||||
Output |
||||||
Output one line, contains the intervals separated by space after the merge. Output the intervals in lexicographically smaller way. In other words, if we output [ai,bi] before [aj,bj], there must be ai < aj or ai=aj and bi <= bj. For more details, referring to the sample. |
||||||
Sample Input |
||||||
4 1 3 2 6 8 10 15 18 5 37 65 29 43 30 42 31 87 32 86 |
||||||
Sample Output |
||||||
[1,6] [8,10] [15,18] [29,87] |
思路:贪心模拟即可。。。。
AC代码:
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; struct zuobiao { int x,y; } a[100010]; int cmp(zuobiao a,zuobiao b) { if(a.x!=b.x) return a.x<b.x; else return a.y<b.y; } int main() { int n; while(~scanf("%d",&n)) { for(int i=0; i<n; i++) { scanf("%d%d",&a[i].x,&a[i].y); } sort(a,a+n,cmp); int flag=0; int xx,yy; for(int i=0; i<n; i++) { if(flag==0) { xx=a[i].x; yy=a[i].y; flag=1; continue; } else { if(a[i].x<=yy) { if(a[i].y>=yy)yy=a[i].y; } else { printf("[%d,%d] ",xx,yy); xx=a[i].x; yy=a[i].y; } } if(i==n-1) { printf("[%d,%d]\n",xx,yy); } } //printf("%d %d\n",xx,yy); } }