求長度不大於\(k\)的最大子段和
求字首和,列舉答案的右端點,對於每個右端點,求以該點為右端點,長度為\(k\)的區間的最小值
用單調佇列維護值單調遞增的下標,對於每個右端點,若隊首元素與當前位置的距離不滿足要求,則出隊,否則記錄答案
#includeusing namespace std;
typedef long long ll;
const int maxn=100010;
int a[maxn<<1],q[maxn<<1];
int main()
while(ln/2)lans-=n/2;
if(rans>n/2)rans-=n/2;
printf("%d %d %d\n",ans,lans,rans);
}return 0;
}
HDU3415單調佇列
這題是單調佇列的典型運用。至於單調佇列,就是乙個雙端佇列,在隊首 f 出隊,在隊尾 b 出隊入隊,我們要維護整個佇列的元素是單調的,比如,我們要動態查詢從左向右的區間的最小值,那麼我們就要在佇列中維護乙個單調遞增的序列,從左向右列舉,佇列的元素還有乙個id值,代表這個元素在原序列中的位置,然後左邊的...
HDU 3415單調佇列
這個題目屬於常見題型,給定一組環狀數列,求出其中長度不超過k的數字之和的最大值。用到了字首和的技巧,比如要求i,j間所有數字之和,可以提前在輸入的時候計算出從0 i的數字之和及從0 j的數字之和,那麼sum i j sum j sum i 現在的問題是求出最大的sum i j 那麼我們可以固定sum...
HDU3415單調佇列
這題是單調佇列的典型運用。至於單調佇列,就是乙個雙端佇列,在隊首 f 出隊,在隊尾 b 出隊入隊,我們要維護整個佇列的元素是單調的,比如,我們要動態查詢從左向右的區間的最小值,那麼我們就要在佇列中維護乙個單調遞增的序列,從左向右列舉,佇列的元素還有乙個id值,代表這個元素在原序列中的位置,然後左邊的...