要求用優秀的複雜度求靜態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值累...