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