[离散化]阴影部分面积
阴影部分面积
题目描述
桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?
输入
第一行,桌面的面积n
第二行,盒子的数量m
第三行到三加m,盒子左下角的横坐标和盒子右下角的横坐标
输出
影子的总宽度
样例输入
20 //桌面总宽度
4 //盒子数量
1 5
3 8
7 10
13 19
样例输出
15
数据范围
1<=n<=100000,1<=m<=100000,保证坐标范围为[1,n].
解析
这道题用离散化,暴力枚举会超时
Code
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[200005],b[100005][3],at=0,ans=0;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d",&a[i+at]);
b[i][1]=a[i+at];
at++;
scanf("%d",&a[i+at]);
b[i][2]=a[i+at];
}
sort(a+1,a+1+m+at);
for(int i=2;i<=2*m;i++){
for(int j=1;j<=m;j++){
if(a[i]>b[j][1] and a[i]<=b[j][2]){
ans+=a[i]-a[i-1];
break;
}
}
}
printf("%d",ans);
return 0;
}