贪心
按区间左端点从小到大排序,每次维护区间右端点,结果为所维护的区间与当前枚举区间的交集
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
int n;
vector<PII> alls;
bool cmp(PII a, PII b)
{
return a.second < b.second;
}
int main()
{
cin >> n;
for (int i = 0; i < 2 * n; i ++ )
{
int a, b;
cin >> a >> b;
alls.push_back({a, b});
}
sort(alls.begin(), alls.end());
int st = 0, ed = 0, res = 0;
for (auto seq: alls)
{
if (ed < seq.first)
st = seq.first, ed = seq.second;
else
{
res += min(ed, seq.second) - seq.first;
ed = max(ed, seq.second);
}
}
printf("%d\n", res);
return 0;
}