问题描述:
给定x 轴上n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
数据输入:
第一行是正整数n,表示闭区间数。接下来的n行中,每行有2 个整数,分别表示闭区间的2个端点。
结果输出:
计算出的去掉的最少闭区间数。
输出为需要去掉的区间数
代码:
#include <iostream> #include <algorithm> using namespace std; struct que { int x,y; }; //排序规则 int tmp(const que &a,const que &b) { if(a.y==b.y) return a.x<=b.x; return a.y<b.y; } int main() { int n; cin>>n; que s[n]; for(int i=0;i<n;i++) { cin>>s[i].x>>s[i].y; if(s[i].x>s[i].y) { int t=s[i].x; s[i].x=s[i].y; s[i].y=t; } } //输入并处理,前小后大 sort(s,s+n,tmp); //排序 int sum=1; for(int i=0;i<n-1;i++) { if(s[i].y<s[i+1].x) { sum++; //相连区间数 } } cout<<n-sum<<endl; //去掉的区间数 return 0; }