影子的寬度 盒子的個數

2022-07-22 13:45:10 字數 2964 閱讀 3356

桌子上零散地放著若干個盒子,盒子都平行於牆。桌子的後方是一堵牆。如圖所示。現在從桌子的前方射來一束平行光, 把盒子的影子投射到了牆上。問影子的總寬度是多少?

輸入格式

第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

nodef[5000005];7

intn,l,r,s,t;

8int max(int x,inty)9

12void pushdown(int l,int r,int

id)13

23void modify(int l,int r,int id) //

[ l , r )

2433 f[id].flag=0;34

int ls=id<<1,rs=ls|1,mid=(l+r)>>1;35

if (s//

注意!!!由於是左閉右開區間,這裡沒有等號

36if (t>mid) modify(mid,r,rs);

37 f[id].lb=f[ls].lb;

38 f[id].rb=f[rs].rb;

39 f[id].num=f[ls].num+f[rs].num;

40//

pushdown(l,mid,ls);

41//

pushdown(mid,r,rs);

42return;43

}44intmain()

45

55 printf("

%d",f[1

].num);

56return0;

57 }

桌子上零散地放著若干個盒子,盒子都平行於牆。桌子的後方是一堵牆。如圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠。

第1行:3個整數l,r,n。-100000 ≤l≤r≤ 100000,表示牆所在的區間;1≤n≤100000,表示盒子的個數 接下來n行,每行2個整數bl, br,-100000 ≤bl≤br≤ 100000,表示乙個盒子的左、右端點。越在前面輸入的盒子越排在離牆近的位置,後輸入的盒子排在離牆遠的位置。

第1行:1個整數m,表示可看到的盒子個數。

1 10 5

2 6

3 6

4 6

1 2

3 63

做出前面那題,這題就比較簡單了。

易得,乙個離牆最遠的盒子不會被其它盒子擋住。由此可推,對於任意乙個盒子i,設它到牆的距離為d[i],如果所有d[j]>d[i]的盒子j不能把盒子i完全擋住,那麼盒子i就可以被看到。

回憶前一題,每新增乙個盒子,就會把線段樹的一些區間完全覆蓋,那麼我們倒過來,從n到1新增盒子,在新增第i個盒子前,線段樹上被覆蓋的區間就是被擋住看不到的區間。要判斷乙個盒子能不能被看到,只要在這個盒子覆蓋區間之前,判斷一下要被覆蓋的區間是不是已經被完全覆蓋,如果沒有被完全覆蓋,這個盒子就可以被看到。

1 #include 2

const

int maxn=100000;3

struct

nodef[5000005];7

int n,l,r,s,t,bl[100005],br[100005

],ans,p;

8bool cansee[100005];9

int max(int x,int

y)10

13void pushdown(int l,int r,int

id)14

23void modify(int l,int r,int id) //

[ l , r )

2434 f[id].flag=0;35

int ls=id<<1,rs=ls|1,mid=(l+r)>>1;36

if (s

37if (t>mid) modify(mid,r,rs);

38 f[id].lb=f[ls].lb;

39 f[id].rb=f[rs].rb;

40 f[id].num=f[ls].num+f[rs].num;

41return;42

}43intmain()

44

線段樹練習2 影子的寬度 統計標記個數

桌子上零散地放著若干個盒子,盒子都平行於牆。桌子的後方是一堵牆。如圖所示。現在從桌子的前方射來一束平行光,把盒子的影子投射到了牆上。問影子的總寬度是多少?第1行 3個整數l,r,n。100000 l r 100000,表示牆所在的區間 1 n 100000,表示盒子的個數 接下來n行,每行2個整數b...

css盒子模型的寬度問題

最近看css權威指南的時候,發現乙個之前特別不清楚的概念 寬度。每個塊級元素都有乙個元素框,元素框內包括了元素內容,元素內邊距,元素邊框,元素外邊距。所以元素框的寬度 元素內容寬度 元素內邊距 元素邊框 元素外邊距。也就是他父元素的內容寬度。那麼我們常說的width就是元素框的寬度嗎?答案是否定的。...

風裡的影子 二

二 昨天一口氣寫下的文字,沒寫完就擱在那了,但是它就像圩堤的決口,將一發不可收拾了,內心終於找到了乙個好的發洩方式,無論悲喜無論激動平靜,都很好的在這得到平衡,就叫它 隨筆了,因為我寫的時候都在聽歌聽 拿小微的話講我是個唯心的傢伙,是的,沒錯,心情本來就是個意識的,怎麼也物質不了,那我隨我的意識而意...