机房同学的做法
查看原帖
机房同学的做法
671294
玄学OIER荷蒻楼主2024/4/29 20:37

我看到有人在做单调栈。

机房同学说:诶,这东西非得单调栈做吗?

我说是这道题吗?(另一道)好像用点 log 数据结构也行。

他认为这个板子就能直接做。

我按他的想法打了代码。

#include<bits/stdc++.h>
using namespace std;
int a[3000010],dp[3000010];
int slv(int x,int id){
	if (id==0) return 0;
	else if (a[id]>x) return id; 
	else return slv(x,dp[id]);
}
int main(){
	int n;
	cin>>n;
	for (int i=1;i<=n;i++) cin>>a[i];
	dp[n]=0;
	for (int i=n-1;i>=1;i--){
		dp[i]=slv(a[i],i+1);
	}
	for (int i=1;i<=n;i++) cout<<dp[i]<<' ';
	return 0;
}

然后过了这题。

他认为这是均摊,总体 O(n)O(n) 的。

2024/4/29 20:37
加载中...