洛谷 P2486 [SDOI2011]染色
阿新 • • 發佈:2020-10-21
洛谷 P2486 [SDOI2011]染色
題目描述
給定一棵 nn 個節點的無根樹,共有 mm 個操作,操作分為兩種:
- 將節點 aa 到節點 bb 的路徑上的所有點(包括 aa 和 bb)都染成顏色 cc。
- 詢問節點 aa 到節點 bb 的路徑上的顏色段數量。
顏色段的定義是極長的連續相同顏色被認為是一段。例如 112221
由三段組成:11
、222
、1
。
輸入格式
輸入的第一行是用空格隔開的兩個整數,分別代表樹的節點個數 nn 和操作個數 mm。
第二行有 nn 個用空格隔開的整數,第 ii 個整數 w_iw**i 代表結點 ii 的初始顏色。
第 33 到第 (n + 1)(n
第 (n + 2)(n+2) 到第 (n + m + 1)(n+m+1) 行,每行描述一個操作,其格式為:
每行首先有一個字元 opo**p,代表本次操作的型別。
- 若 opo**p 為
C
,則代表本次操作是一次染色操作,在一個空格後有三個用空格隔開的整數 a, b, ca,b,c,代表將 aa 到 bb 的路徑上所有點都染成顏色 cc。 - 若 opo**p 為
Q
,則代表本次操作是一次查詢操作,在一個空格後有兩個用空格隔開的整數 a, ba,b,表示查詢 aa 到 bb 路徑上的顏色段數量。
輸出格式
對於每次查詢操作,輸出一行一個整數代表答案。
題解:
精髓在於線段樹維護顏色塊。
可以參考小白逛公園的維護方式,在維護答案的同時維護區間左右端點的顏色。顯然的是,在區間合併的時候,如果左兒子的右端點顏色等於右兒子的左端點顏色,那麼就需要把答案-1.
就這麼維護就好了。