5871. 【NOIP2018模擬9.15】挑戰

題面:

比賽時就差30秒就能把滿分程序交上去了,我還能說什麼好……

題解:

題意是1~n個非負整數有m次修改,每次修改後求出一個最小的位置t,使得sum[1~t-1]=p[t]。

假設當前修改的位置x在上次得出的答案位置的後面,那麼答案不變,對吧?
那麼假設位置x在上次得出的答案位置的前面,這次的答案就要重新計算了。 此時這次答案若存在,則一定在x~n範圍內。

我們在x~n範圍內找到一個最靠前的位置t,使得t上面的值要大於等於sum[1~x-1]。因爲如果t要是史前最大毒瘤,則p[t]是要等於sum[1~t-1],所以p[t]一定要滿足大於等於sum[1~x-1]。(這裏之所以有等於是因爲t有可能就在位置x)

找到了t以後,我們判斷t是否是史前最大毒瘤(即t是否等於sum[1~t-1]),如果是,就是答案了,如果不是,則答案區間變成了t+1~n,我們再找下一個t‘

t’要滿足大於sum[1~t]的且最靠前的。(之所以不讓t'一次性就大於等於sum[1~t'-1]是因爲這樣真的做不到)

然後我們把找出的t'判斷是否是答案,如果是就輸出,如果不是就繼續找下一個t'',以此類推。

 

算一下時間複雜度。

每次找t可以用logn(我不會,想知道的可以去問問其他過的dalao)或者logn^2的時間(二分套線段樹)。

至於有多少個t嘛,最多隻可能有log(10^9)個,爲什麼呢?因爲是類似前綴和的,所以每個sum[1~t]相當於至少是前面sum[1~t-1]的2倍。至於p有0的情況嘛,講題的時候我被一羣dalao帶偏了,其實現在想想有很多0也沒關係啊,t肯定不會在0上,那不是直接跳過的嗎。 如果全部都是0,那答案是1直接稍微判斷一下使t不會一個一個往下枚舉就好了。

 

所以,綜上,時間複雜度是O(能過)呸應該是O(mlog^2)。

Over。

 

客官,點個贊再走可好啊?QwQ

 

日常中二

“我重臨世界之日,衆逆臣皆當死去!”

“我們的火……要把整個世界……都給點燃!”

“我們都是小怪獸,總有一天會被正義的奧特曼打倒。”

“小白,待你長髮及腰,嫁我可好?”

“前進!前進!不擇手段地前進!”

“這個世界很美好,可是對我卻並不溫柔。”

“爲了你,我可以創造整個世界,也可以毀滅整個世界!”

“以九幽之軀,執天道之權柄!”

“你有你在乎的人,可我也有啊……你說好不殺她的……”

“我們在世上邊看繁花,邊朝那地獄行去。”

“或許在某天夜裏,你會無端地想起一個人,他曾讓你對明天有所憧憬,卻不曾出現在你的明天裏。”

“凡王之血,必以劍終!”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章