这种写法在处理什么数据时会TLE
查看原帖
这种写法在处理什么数据时会TLE
392327
段落楼主2022/10/2 19:15
#include<bits/stdc++.h>
using namespace std;
int n,b[100010],c[100010],d[100010];
long long ans=0,a[100010];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		d[i]=a[i];
	}
	for(int i=1;i<=n;i++)//向左找第一个比a[i]小的数的位置 
	{
		int j=i-1;
		while(1)
		{
			if(a[i]>a[j])
			{
				b[i]=j;
				break;
			}
			else if(a[i]==a[j])
			{
				b[i]=b[j];
				break;
			}
			else
			{
				j=b[j];
			}
			if(j==0)break;
		}
	}
	for(int i=n;i>=1;i--)//向右找第一个比a[i]小的数的位置 
	{
		int j=i+1;
		while(1)
		{
			if(a[i]>a[j])
			{
				c[i]=j;
				break;
			}
			else if(a[i]==a[j])
			{
				c[i]=c[j];
				break;
			}
			else
			{
				j=c[j];
			}
		}
		
	}
	for(int i=1;i<=n;i++)
	{
		a[i]+=a[i-1];
	}
	for(int i=1;i<=n;i++)//当d[i]为区间最小值 
	{
		ans=max(ans,d[i]*(a[c[i]-1]-a[b[i]]));
	}
	cout<<ans;
	return 0;
}

这种写法在处理什么数据时会TLE

2022/10/2 19:15
加载中...