桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?
20 //桌面总宽度
4 //盒子数量
1 5
3 8
7 10
13 19
15
数据范围
1<=n<=100000,1<=m<=100000,保证座标范围为[1,n].
离散化~~~~
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int L, M, k, a[200005], ans;
struct line
{
int start, end;
}b[100005];
int main()
{
int x, y;
scanf("%d%d", &L, &M);
for (int i = 1; i <= M; ++i) {
scanf("%d%d", &x, &y);
a[++k] = x; a[++k] = y;
b[i].start = x; b[i].end = y;
}//读入
sort(a + 1, a + k + 1);//排个序
for (int i = 1; i <= k; ++i)
for (int j = 1; j <= M; ++j)
{
if (a[i] > b[j].start && a[i] <= b[j].end)//是否在范围内
{
ans += a[i] - a[i - 1];
break;
}
}
printf("%d", ans);
return 0;
}