BZOJ5042 LWD的分科島

2022-05-19 19:48:09 字數 1013 閱讀 3231

給出n個數,q個詢問,每個詢問輸入opt,l,r,如果opt=1,則輸出l到r中的最小值,否則輸出最大值

直接上st表,自信一波,結果

mle??好吧,離線求,最大最小值用乙個陣列求

tle???好吧,看討論,詢問的範圍1000左右,好,縮一波時間

re????好吧,不預處理2的次方,直接位運算

ac??好吧,ok了

#include#include

#include

#include

#include

using

namespace

std;

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int m[15][3100000

];int log[3100000

];struct

question

q[2100000

];int

main()

log[

0]=-1;for(int i=1;i<=n;i++) log[i]=log[i>>1]+1

;

for(int i=1;(1

<10;i++)

else

break

; }

}for(int i=1;i<=q;i++) q[i].opt=read(),q[i].l=read(),q[i].r=read();

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

}for(int i=1;(1

<10;i++)

else

break

; }

}for(int i=1;i<=q;i++)

}for(int i=1;i<=q;i++) printf("

%d\n

",q[i].d);

return0;

}

bzoj 5042 LWD的分科島

要求用優秀的複雜度求靜態rmq 這道題首先肯定不能帶log,那可以考慮離線做,讓詢問右端點遞增。列舉右端點,用並查集fa i 表示i r的極值所在的位置,然後發現每次需要改變的位置可以用單調棧來計算,那複雜度就近似o n 了。include include include include inclu...

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值累...