数轴上有 n 个闭区间 [a_i, b_i]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)
Input
第一行1个整数N(N<=100)
第2~N+1行,每行两个整数a,b(a,b<=100)
Output
一个整数,代表选点的数目
Examples
Input
2
1 5
4 6
Output
1
Input
3
1 3
2 5
4 6
Output
2
#include <iostream>
#include <list>
using namespace std;
struct line {
int start;
int end;
line(int s, int e) :start(s), end(e) {
}
bool operator<(const line& l2) {
if (start != l2.start) {
return start < l2.start;
}
return end < l2.end;
}
};
int main(int argc, char** argv) {
list<line> lines;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
line newline(a, b);
lines.push_back(newline);
}
lines.sort();
int cmin = 999, cmax = 999, ca = 999, cb = 999, point = 0;
for (list<line>::iterator it = lines.begin(); it != lines.end(); it++) {
ca = it->start; cb = it->end;
if (cmin == 999) {
cmin = ca; cmax = cb;
continue;
}
if (ca > cmax) { //new point
point++;
cmin = ca;
cmax = cb;
continue;
}
if (cb < cmax) { //change cmax
cmax = cb;
}
cmin = ca; //change cmin
}
if (ca != 999)point++;
cout << point << endl;
return 0;
}