計蒜客 Max answer 單調棧 DP思想

2021-09-19 09:22:17 字數 759 閱讀 1520

題目傳送門

單調棧時,將每個值作為最小值尋找其左右最長能夠延伸的位置,再利用字首和陣列進行更新最大值

然後處理負數時,我們總是盡可能希望負數能夠和負數相乘,這樣才能最大化

#include#include#include#includeusing namespace std;

const int maxn=5e5+5;

typedef long long ll;

typedef pairpii;

ll max(ll a,ll b)

int main()

memcpy(b,a,sizeof(a));

for(int i=1;i<=n;i++)

b[n+1]=0;

stackstr;

while(!str.empty()) str.pop();

//單調棧,以每乙個數作為延伸,記錄延伸範圍

for(int i=1;i<=n+1;i++)

else

str.push(pii(b[i],i));}}

ll solve=-1;

for(int i=1;i<=n;i++)

}while(!str.empty())

for(int i=1;i<=n;i++)

c[i]=-a[i];

ll cur=0,mx=0;

for(int i=1;i<=n;i++)

cout

}

計蒜客 單調減子串行

從乙個由 nn 個整數排列組成的整數序列中,自左向右不連續的選出一組整數,可以組成乙個單調減小的子串行 如從 68,69,54,64,68,64,70,67,78,62,98,87 68,69,54,64,68,64,70,67,78,62,98,87 中我們可以選取出 69,68,64,62 69...

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...

計蒜客 解碼

蒜頭君自己發明了一種字串的編碼方式,對於只含有大小寫字母的字串,可以用數字來表示括號裡面的串連續出現的次數 數字有可能超過一位數 比如a abcd 2等價於aabcdabcd。特別地,如果數字前面沒有括號,表示緊貼數字的前面的 乙個字母 出現的次數。比如abc2表示abcc。為了降低解碼的難度,蒜頭...