P3793 由乃救爺爺 分塊,ST表

2022-06-29 04:00:25 字數 966 閱讀 8814

給出\(n\)個數字的乙個序列\(m\)次詢問區間最大值

保證資料隨機

\(1\leq n,m\leq 2\times 10^7\)

使用\(st\)表可以做到\(o(1)\)詢問,但是預處理的時空複雜度都是\(o(n\log n)\),且自帶大常數導致過不了。

如何加快預處理的時間,(因為是lxl的題目所以)考慮使用分塊。每次詢問可以分為整塊的部分和不是整塊的零散部分。

去掉沒有跨塊的情況,那麼零散的部分就是塊內前字尾最大值。然後整塊的部分用\(st\)表就好了。

那麼沒有跨塊的情況是不是還需要給每個塊維護乙個\(st\)表?這樣空間還是過不了,其實可以考慮將沒有跨塊的情況按順序每個塊每個塊離線處理,這樣就可以過了。

但是資料保證隨機,所以隨機到同乙個塊內的概率是\(\frac\),也就是期望\(\sqrt n\)次,暴力處理是\(o(\sqrt n)\)的,所以直接暴力處理就可以了

時間複雜度\(o(n\log\sqrt n+m)\)。

#include#include#include#includeusing namespace std;

const int n=2e7+10;

namespace genhelper

}void srand(unsigned x)

int read()

int n,m,a[n],lg[n],p[n],q[n],g[5000][13];

int l[5000],r[5000],pos[n];

unsigned s;

unsigned long long ans;

int askt(int l,int r)

for(int j=1;(1<>1]+1;

for(int i=1;i<=m;i++)

else

ans+=tmp;

} printf("%llu\n",ans);

}

P3793禮物和糖果

問題描述 何老闆要給大家買節日禮物,他有m元錢,學校小賣部有n種禮品,因為店長和何老闆是熟人,所以若第i種禮品買x x 0 件的話,店長會給何老闆ai x bi顆糖果。因為何老闆非常喜歡吃糖,所以他希望獲得的糖果越多越好。現給出每種禮品的單價wi ai值與bi值,問何老闆最多能得到多少顆糖果?輸入格...

演義由Linux和Windows表演的PC故事

最近一直在讀書並實踐vm和wsl上執行linux系統,儘管學業不精,但還是有些讀後感可以分享的。當年,ibm將x86結構公布天下,隨後又棄掉ibm dos改用ms dos,先引導 讀入bios 裝載command.com命令直譯器,出現提示符。在提示符下用tc qb tp等開發環境,也可執行程式,但...

由P2P想到網路智慧型 不成熟的看法和想法

由 p2p想到網路智慧型 不成熟的看法和想法 技術總是在改造著我們的生產力並改變我們的生活方式,通常是好的方向。在人類與大自然和諧共處又互相鬥爭的歷史上,人類從來就沒有放棄過解放自己於各種繁重的勞動,尤其是高智慧型的腦力勞動。在研究我們自身的過程中,儘管我們並沒有搞清楚我們大腦是如何思考的,但所有相...