POJ2528 线段树+离散化+hash(成段更新)
生活随笔
收集整理的這篇文章主要介紹了
POJ2528 线段树+离散化+hash(成段更新)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:Mayor's posters
?
題意:在墻上貼海報,海報可以互相覆蓋,問最后可以看見幾張海報
思路:這題數據范圍很大,直接搞超時+超內存,需要離散化:
離散化簡單的來說就是只取我們需要的值來用,比如說區間[1000,2000],[1990,2012] 我們用不到[-∞,999][1001,1989][1991,1999][2001,2011]
[2013,+∞]這些值,所以我只需要1000,1990,2000,2012就夠了,將其分別映射到0,1,2,3,在于復雜度就大大的降下來了
所以離散化要保存所有需要用到的值,排序后,分別映射到1~n,這樣復雜度就會小很多很多
而這題的難點在于每個數字其實表示的是一個單位長度(并且一個點),這樣普通的離散化會造成許多錯誤(包括我以前的代碼,poj這題數據奇弱)
給出下面兩個簡單的例子應該能體現普通離散化的缺陷:
1-10 1-4 5-10
1-10 1-4 6-10
為了解決這種缺陷,我們可以在排序后的數組上加些處理,比如說[1,2,6,10]
如果相鄰數字間距大于1的話,在其中加上任意一個數字,比如加成[1,2,3,6,7,10],然后再做線段樹就好了.
?
總結
以上是生活随笔為你收集整理的POJ2528 线段树+离散化+hash(成段更新)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线段树POJ3468(成段更新,区间求和
- 下一篇: 离散对数(Baby Step Giant