#include<iostream>
using namespace std;
//线段类
class Line {
public:
int start = 0;
int end = 0;
};
int main() {
int spaceLength=0;//区间长度
int spaceEnd = 0;//线段已覆盖长度
int lineNumber = 0;
int count = 0;//线段使用数量
cout << "请输入线段的数量:" << endl;
cin >> lineNumber;
Line* L = new Line[lineNumber];
cout << "请输入线段的信息:" << endl;
for (int i = 0; i < lineNumber; i++) {
cin >> L[i].start >> L[i].end;
}
Line temp;
//线段排序
for (int i = 0; i < lineNumber; i++) {
for (int j = i+1; j < lineNumber; j++) {
if (L[i].start > L[j].start) {
temp = L[j];
L[j] = L[i];
L[i] = temp;
}
}
}
/*for (int i = 0; i < lineNumber; i++) {
cout << L[i].start << " " << L[i].end << endl;
}*/
cout << "请输入区间长度:" << endl;
cin >> spaceLength;
//第一条线段一般满足条件
if (spaceLength >= L[0].end) {
spaceEnd = L[0].end;
count++;
}
int k = lineNumber;
int Num = 0;//记录满足条件的线段
int index;
//贪心
while (spaceEnd < spaceLength) {
for (int j = 0; j < k; j++) {
if (L[j].start <= spaceEnd) {
Num++;
index = j;
}
}
//如果满足条件的就一个就直接将这个线段加上
//如果不止一个,就先求出末尾最长的线段,再加上该线段
if (Num == 1) {
count++;
spaceEnd = L[index].end;
}
else if (Num>=2) {
int temp1 = 0;
for (int i = index; i >= index-Num; i--) {
if (L[i].end >= temp1) {
temp1 = L[i].end;
}
}
count++;
spaceEnd = temp1;
}
}
cout << "最少线段数:" << count << endl;
return 0;
}