[离散化]线段树练习一

线 段 树 练 习 题 一 线段树练习题一 线


题目描述

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


样例输入

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-08-09 19:20  unknown_future  阅读(34)  评论(0编辑  收藏  举报