最大的問題是一個一個跑過的話,複雜度不好會超時。
如果把陣列切成$B$個部分,後面會把這些部分叫做塊,紀錄每個部分的最大值和最小值,只要$O(1)$就能知道一個部分的最小值和最大值。
不過並不是每次查詢都能很好的切在各個塊的端點,所以對於查詢導致不完整塊,就暴力跑過每一項求解,不過端點只有兩個,問題不是很大。
總共有$N/B$個塊,塊的大小是$B$,因此單次查詢的時間是$O(B+N/B)$。
根據算幾不等式,讓$B=\sqrt{N}$會有最小值,複雜度會是$O(\sqrt{N})$。
如此就能通過此題,這個技巧稱為 分塊 。