P2161 會場預約 區間染色

2021-09-12 16:17:19 字數 724 閱讀 5853

這題可以轉換成區間染色的問題,即對一段區間進行染色,問最後純色的區間一共有多少個(不超過一種顏色的區間)。

對每一段區間維護乙個colortagcolor>0代表該區間染了一種顏色,color=-1代表區間雜色,color=0代表區間無色。

tag就是乙個懶惰標記。

這裡有兩個操作:

查詢當前[l,r]染色區間的個數,並將這些區間去除(只要接觸到[l,r]就要去除)。

[l,r]染上顏色。

對於操作1

如果查詢到[l,r]範圍內的color != -1 且不等於 0,那麼說明該區間只有一種顏色,將這個顏色存起來,如果是-1(雜色),那就繼續往下找。

知道了有先前已經染了哪些顏色後,我們就需要把前面的顏色都去除,所以我們必須將操作都離線儲存,這樣才能知道每個顏色對應的區間,然後update刪除。

對於操作2

怎麼刪除的就怎麼新增,注意打上tag標記和區間加法一樣。

還要注意的是color的pushup,當左兒子和右兒子顏色不同時color = -1,若都無色則為0,否則就是其中一種顏色。

題解 洛谷P2161 會場預約(線段樹)

先說一下這道題的解題思路,我們使用離線操作的做法。記錄讀入的資料,把開始結束日期存在結構體裡,並記錄是a操作還是b操作。開乙個陣列記錄染色情況 乙個cnt陣列記錄第幾個操作推掉了幾個預約,讀入後我們倒著迴圈進行查詢,如果讀入的是b就跳過,如果是a的話就將開始到結束日期的所有點染成當前序號的顏色。如果...

樹狀陣列 二分 洛谷 P2161 會場預約

pp大廈有一間空的禮堂,可以為企業或者單位提供會議場地。這些會議中的大多數都需要連續幾天的時間 個別的可能只需要一天 不過場地只有乙個,所以不同的會議的時間申請不能夠衝突。也就是說,前乙個會議的結束日期必須在後乙個會議的開始日期之前。所以,如果要接受乙個新的場地預約申請,就必須拒絕掉與這個申請相衝突...

洛谷2161 會場預約 題解

好吧,用stl水過了一道題。顯然,每一次進行修改之前的所有預約一定是沒有互相覆蓋的。我們用set保留所有的預約,這樣在詢問時只要輸出set的size就行了 對於每次的新預約,我們就先找到右端點大於該區間左端端點的區間,然後乙個乙個刪除矛盾的預約就行了 複雜度大概為o n logn 2 bzoj上這道...