天天看點

UVALive 6609(Minimal Subarray Length)維護遞增序列|RMQ

題意:給一個整數序列(可能有負數),求最短的連續序列使得序列之和大于等于整數x;

解法:第一種是On的複雜度:

                  我們要的是sum[j]-sum[i]>=x,如果有兩個決策j < j‘,而且sum[j] >= sum[j‘],那麼j就是沒用的。即維護一個sum[j]遞增序列。然後每次可以二分查找,但是這裡有個特點就是要得到最近的,可以同時維護一個left指針,left指針用于跟進更行答案的左邊界,因為維護的單調棧不會再右移到left左邊去了(因為如果left右邊還可以更新的答案肯定沒有目前的小了)。

      第二種是RMQ的做法,比較好了解:枚舉i,然後求sum[j]-sum[i]>=x最小的j,那麼就二分查找j。總複雜度nlogn

第一份代碼:

第二份代碼: