蒟蒻求助,两个点TLE,如何修改
查看原帖
蒟蒻求助,两个点TLE,如何修改
265453
strange757楼主2021/12/5 09:52
#include<iostream>
using namespace std;
const int P=1000010;
int a[2001000],n,ans,m;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>m;
		if(i==1){
			ans+=m;
			a[m+P]=0;	
			int l=1,r=1;
			while(m-l+P>=0){
			a[m-l+P]=l;
			l++;
			}
			while(m+r<=P){
			a[m+r+P]=r;
			r++;
			}
		}
		else {
			ans+=a[m+P];
			a[m+P]=0;
			int l=1,r=1;
			while(a[m-l+P]>l&&m-l+P>0){
			a[m-l+P]=l;
			l++;
			}
			while(a[m+r+P]>r&&m+r<=P){
			a[m+r+P]=r;
			r++;
			}
		}
	}
	cout<<ans;
	return 0;
}

思路是根据每天的营业额将所有天数的最小波动值求出比较最优解,但是会有两个点超时,该如何修改。求助

2021/12/5 09:52
加载中...