影子的宽度&&盒子的个数

您所在的位置:网站首页 相似影子投到墙上的图片素材 影子的宽度&&盒子的个数

影子的宽度&&盒子的个数

2024-07-13 19:28| 来源: 网络整理| 查看: 265

影子的宽度 问题描述

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

enter image description here

输入格式

第1行:3个整数L,R,N。-100000 ≤L≤R≤ 100000,表示墙所在的区间;1≤N≤100000,表示盒子的个数 接下来N行,每行2个整数BL, BR,-100000 ≤BL≤BR≤ 100000,表示一个盒子的左、右端点

输出格式

第1行:1个整数W,表示影子的总宽度。

样例输入

Sample Input 1

0 7 2

1 2

4 5

Sample Input 2

-10 10 2

-5 2

-2 2

Sample Input 3

-10 10 3

-7 0

-4 9

-4 2

Sample Input 4

-100 100 3

-7 2

5 9

2 5

Sample Input 5

-50 50 4

-2 4

0 6

9 10

-5 30

样例输出

Sample Output 1

2

Sample Output 2

7

Sample Output 3

16

Sample Output 4

16

Sample Output 5

35

题解

用线段树维护左闭右开的区间 [l,r)影子的总宽度,标记flag表示这段区间是否全被影子覆盖。下传标记的时候,传完后不能置为0。

 

1 #include 2 const int maxn=100000; 3 struct node{ 4 int num; 5 bool lb,rb,flag; 6 }f[5000005]; 7 int n,L,R,s,t; 8 int max(int x,int y) 9 { 10 return x>y?x:y; 11 } 12 void pushdown(int l,int r,int id) 13 { 14 if (!f[id].flag) return; 15 int ls=id1; 16 f[ls].num=mid-l; 17 f[rs].num=r-mid; 18 f[ls].flag=f[rs].flag=1; 19 f[ls].lb=f[ls].rb=f[rs].lb=f[rs].rb=1; 20 // f[id].flag=0; // 不知道为什么写了这句会WA 21 return; 22 } 23 void modify(int l,int r,int id) // [ l , r ) 24 { 25 pushdown(l,r,id); 26 if (sd[i]的盒子j不能把盒子i完全挡住,那么盒子i就可以被看到。

回忆前一题,每添加一个盒子,就会把线段树的一些区间完全覆盖,那么我们倒过来,从n到1添加盒子,在添加第i个盒子前,线段树上被覆盖的区间就是被挡住看不到的区间。要判断一个盒子能不能被看到,只要在这个盒子覆盖区间之前,判断一下要被覆盖的区间是不是已经被完全覆盖,如果没有被完全覆盖,这个盒子就可以被看到。

 

1 #include 2 const int maxn=100000; 3 struct node{ 4 int num; 5 bool lb,rb,flag; 6 }f[5000005]; 7 int n,L,R,s,t,bl[100005],br[100005],ans,p; 8 bool cansee[100005]; 9 int max(int x,int y) 10 { 11 return x>y?x:y; 12 } 13 void pushdown(int l,int r,int id) 14 { 15 if (!f[id].flag) return; 16 int ls=id1; 17 f[ls].num=mid-l; 18 f[rs].num=r-mid; 19 f[ls].flag=f[rs].flag=1; 20 f[ls].lb=f[ls].rb=f[rs].lb=f[rs].rb=1; 21 return; 22 } 23 void modify(int l,int r,int id) // [ l , r ) 24 { 25 pushdown(l,r,id); 26 if (s=1;p--) 52 s=bl[p],t=br[p], 53 modify(L,R,1); 54 for (i=1;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3