30分求助!
查看原帖
30分求助!
516468
_Give_up_楼主2022/8/20 13:02
#include<bits/stdc++.h>
#define N 10010

using namespace std;

int read()
{
    int x = 0,f = 1;
    char c = getchar();
    while(c<'0' || c>'9')
	{
        if(c=='-') f = -1;
        c = getchar();
    }
    while(c>='0' && c<='9')
	{
        x = (x<<3)+(x<<1)+(c^48);
        c = getchar();
    }
    return x*f;
}

int a[N];

int find_left(int x)
{
	for (int i=x-1;i>=1;i--)
		if (a[i]>a[x]) return i;
	return -1;
}

int find_right(int x,int n)
{
	for (int i=x+1;i<=n;i++)
		if (a[i]>a[x]) return i;
	return -1;
}

int main()
{
	int n=read();
	for (int i=1;i<=n;i++)
		a[i]=read();
	int ans = 0,k=1;
	for (int i=2;i<n;i+=k)
	{
		k = 1;
		int l=find_left(i),r=find_right(i,n);
		if (l==-1 || r==-1) continue;
		if (r-l-1>1) k = (r-l-1);
		int h = min(a[l],a[r])-a[i];
		ans += h*(r-l-1);
	}
	cout << ans << endl;
	return 0;
}

#1 #4 #6 AC,其他WA

2022/8/20 13:02
加载中...