ssl2645 線段樹練習題2 線段樹變式

2021-10-09 00:00:14 字數 1137 閱讀 1289

桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠(輸入時,由底向上,從左到右)。

16

//桌子長度

5// 盒子數量47

121415

6101116

4
1<=n<=100000,1<=m<=100000,保證座標範圍為[1,n].

可以這樣來看這道題:x軸上有若干條不同線段,將它們依次染上不同的顏色,問最後能看到多少種不同的顏色?(後染的顏色會覆蓋原先的顏色)

我們可以這樣規定:x軸初始是顏色0,第一條線段染顏色1,第二條線段染顏色2,以此類推。

原先構造線段樹的方法不再適用,但是我們可以通過修改線段樹的cover域的定義,使得這道題也能用線段樹來解。

定義cover如下:cover=−1表示該區間由多種顏色組成。cover>=0表示該區間只有一種單一的顏色cover.

#include

#include

#include

#include

typedef

long

long ll;

using

namespace std;

int n,m,l,r,ans,f[

100001

],tree[

300001];

void

insert

(int k,

int l,

int r,

int x,

int y,

int c)

else

if(y<=mid)

else

if(x>=mid)

else}}

}void

cnt(

int k,

int l,

int r)

else

if(l+

1}int

main()

cnt(1,

1,n)

;for

(int i=

1;i<=m;i++)}

cout

}

2645 線段樹練習題二

桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 可以把每個盒子看成一種顏色的線段,後塗的線段可以覆蓋前面的,原來的顏色為0,問最後這條直線上有多少種顏色的線段 原先構造線段樹的方法不再適用,但是我們可...

SSL P2645 線段樹練習題二

題目大意 n長度的桌子上零散地放著m個不同顏色的盒子,桌子的後方是一堵牆。給出每個箱子的左端跟右端,問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 1 n 100000,1 m 100000,保證座標 l,r 範圍為 1,n 題解 線段樹 跟zju的那道題一樣,不過把記...

SSLGZ 2645 線段樹練習題二

問題描述 桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 樣例輸入 16 桌子長度 5 盒子數量 4 7 12 14 1 5 6 10 11 16 樣例輸出 4演算法討論 構建線段樹,我們定義區間標記...