題意:給一個整數序列(可能有負數),求最短的連續序列使得序列之和大於等於整數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
第一份代碼:
/******************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include
#include
#include