P2422 良好的感覺【單調隊列】

題目鏈接:https://www.luogu.org/problem/P2422
AC代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
const int maxn=1e5+10;
ll a[maxn];
ll sum[maxn];
ll cnt[maxn];
int que[maxn];//用數組模擬單調隊列
int main()
{
    cin>>n;
    a[0]=0;
    sum[0]=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        cnt[i]=0;
        sum[i]=sum[i-1]+a[i];
    }
    int r=0;
    que[++r]=0;
    ll ans=0;
    for(int i=1;i<=n;i++){
        while(a[que[r]]>a[i]){//維護單調區間的最小值
            cnt[que[r]]+=sum[i-1]-sum[que[r]];//cnt[]加上後半段滿足的區間值
            r--;
        }
        cnt[i]+=sum[i]-sum[que[r]];//cnt[]加上前半段滿足的區間值
        que[++r]=i;
    }
    for(int i=1;i<=n;i++){
        ans=max(ans,cnt[i]*a[i]);
    }
    cout<<ans<<endl;
    return 0;
}

我一定可以的!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章