[离散化]阴影部分面积

阴影部分面积


题目描述

桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?
在这里插入图片描述


输入

第一行,桌面的面积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;
} 
posted @ 2020-07-21 10:19  unknown_future  阅读(39)  评论(0编辑  收藏  举报