一、
二、单调队列
1 inline int FindMax() 2 { 3 int ans=-0x3f3f3f3f; 4 Q.push_back(0); //Q放置的是下标 5 for(int i=1;i<=n;i++) 6 { 7 while(!Q.empty()&&Q.front()<i-m)Q.pop_front(); //判断是否超出左边界 8 ans=max(ans,s[i]-s[Q.front()]); // 不断更新答案 9 while(!Q.empty()&&s[Q.back()]>=s[i])Q.pop_back(); 10 //比右边大的话,减掉一定小于等于零,并不优于i,所以不能要这一块,只能减这块之前的 11 Q.push_back(i); 12 } 13 return ans; 14 }
原文地址:https://www.cnblogs.com/XXrll/p/11179667.html
时间: 2024-10-31 18:20:38