bzoj 5042 LWD的分科島

2021-09-05 10:46:25 字數 1158 閱讀 2866

要求用優秀的複雜度求靜態rmq

這道題首先肯定不能帶log,那可以考慮離線做,讓詢問右端點遞增。

列舉右端點,用並查集fa[i]表示i~r的極值所在的位置,然後發現每次需要改變的位置可以用單調棧來計算,那複雜度就近似o(n)了。

#include

#include

#include

#include

#include

using

namespace std;

inline

intread()

while

(ch>=

'0'&& ch<=

'9')x=x*

10+ch-

'0',ch=

getchar()

;return x*f;

}inline

void

write

(int x)

inline

void

pr1(

int x)

inline

void

pr2(

int x)

struct bian

e[1500010];

int len,last[

3000010];

inline

void

ins(

int x,

int y)

struct node

q[1500010];

int a[

3000010

],fa[2]

[3000010

],ans[

1500010

],top[2]

,sta[2]

[3000010];

inline

intfindfa

(int x,

int id)

intmain()

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=m;i++

)pr2

(a[ans[i]])

;return0;

}

BZOJ5042 LWD的分科島

給出n個數,q個詢問,每個詢問輸入opt,l,r,如果opt 1,則輸出l到r中的最小值,否則輸出最大值 直接上st表,自信一波,結果 mle?好吧,離線求,最大最小值用乙個陣列求 tle?好吧,看討論,詢問的範圍1000左右,好,縮一波時間 re?好吧,不預處理2的次方,直接位運算 ac?好吧,o...

BZOJ3450 BZOJ4318 期望的線性性質

這兩個題的套路是一樣的,放在一起說。因為期望有線性性質,也就是說我們可以分開算每一位的期望,再加起來就是答案。由於e x 1 2 x 2 2 e x 1e x 1 2 x2 2e x 1,所以我們只需要維護乙個期望長度即可,維護的方法十分簡單,相信聰明的你很快就能明白。include using n...

bzoj1202 狡猾的商人

如果這個賬本是真的話,那麼對於乙個s,t,在圖上,兩個點之間任意一條路徑的長度都必須相等,不然這個賬本就不是真的。用並查集在維護這個資訊,也就是字首和,字首和就是前i個月收入的錢,那麼對於任意一行資料 s t v 都有 sum s sum t v 然後在並查集的時候,查詢父親節點的時候,將sum值累...