題目傳送門
單調棧時,將每個值作為最小值尋找其左右最長能夠延伸的位置,再利用字首和陣列進行更新最大值
然後處理負數時,我們總是盡可能希望負數能夠和負數相乘,這樣才能最大化
#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。為了降低解碼的難度,蒜頭...