没事找事的蒟蒻尝试用前缀做
查看原帖
没事找事的蒟蒻尝试用前缀做
1125645
DyingEncoder楼主2024/10/27 19:49

这道题标准做法当然是直接用单调栈,但是蒟蒻总是喜欢没事找事,于是就希望用递推前缀来做做看,结果全部TLE,还不如直接暴力枚举。。。不知道怎么回事

#include<cstdio>
using namespace std;
int n;
int a[3000006];
int ans[3000006];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	//a[i]<a[j],j为答案;a[i]>=a[j],答案的值起码大于a[j],
	//因此从ans[j]开始向后找 
	for(int i=n;i>=1;i--){
		int j=i+1;
		while(j<=n&&a[j]<=a[i]){
			j=ans[j];
		}
		if(j>n) ans[i]=0;
		else ans[i]=j;
	}
	for(int i=1;i<=n;i++){
		printf("%d ",ans[i]);
	}
	return 0;
}
2024/10/27 19:49
加载中...