X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Node
{
long long int start, end;
Node(long long int s, long long int e)
{
start = s;
end = e;
}
};
bool compare(Node &a, Node &b)
{
return a.end < b.end;
}
int fun(vector<Node> &input, int N)
{
sort(input.begin(), input.end(), compare);
int result = 0;
int previous = 0;
for (int i = 1; i < N; i++)
{
if (input[i].start >= input[previous].end)
{
result++;
previous = i;
}
}
if (result != 0)
{
result++;
}
return result;
}
int main()
{
int N;
scanf("%lld", &N);
long long int a;
long long int b;
vector<Node> input;
for (int i = 0; i < N; i++)
{
scanf("%lld %lld", &a, &b);
input.push_back(Node(a, b));
}
cout << fun(input, N) << endl;
return 0;
}