求调
查看原帖
求调
1099150
lyh4楼主2024/12/6 19:20
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
int num[1000001];
stack <int> s1, s2;
int peo[1000001];
int ans;
signed main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)cin >> num[i];
    for (int i = 1; i <= n; i++)
    {
        while (!s1.empty() && num[s1.top()] <= num[i]) s1.pop();
        if(!s1.empty())peo[i]+=(i-s1.top()-1);
        else peo[i]+=i;
        s1.push(i);
    }
    for (int i = n; i >= 1; i--)
    {
        while (!s2.empty() && num[s2.top()] <= num[i]) s2.pop();
        if(!s2.empty())peo[i]+=(s2.top()-i-1);
        else peo[i]+=(n-i);
        s2.push(i);
    }
    for(int i = 1; i <= n; i++)ans+=peo[i];
    cout <<ans/2;
    return 0;
}
2024/12/6 19:20
加载中...