桌子上零散地放著若干個盒子,盒子都平行於牆。桌子的後方是一堵牆。如圖所示。現在從桌子的前方射來一束平行光, 把盒子的影子投射到了牆上。問影子的總寬度是多少?
輸入格式
第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 2const
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就是元素框的寬度嗎?答案是否定的。...
風裡的影子 二
二 昨天一口氣寫下的文字,沒寫完就擱在那了,但是它就像圩堤的決口,將一發不可收拾了,內心終於找到了乙個好的發洩方式,無論悲喜無論激動平靜,都很好的在這得到平衡,就叫它 隨筆了,因為我寫的時候都在聽歌聽 拿小微的話講我是個唯心的傢伙,是的,沒錯,心情本來就是個意識的,怎麼也物質不了,那我隨我的意識而意...