提问
查看原帖
提问
768476
gf202276楼主2024/10/18 13:07

究竟有没有数据卡得掉这个dp
f[i]表示i右边第一个大于i的位置 这个交上去跑了300多毫秒

#include<bits/stdc++.h>
using namespace std;
int f[4005050],n,a[4005050];
long long ans;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	f[n]=0;
	for(int i=n-1;i>=1;i--){
		int j=i+1;
		while(j&&a[j]<=a[i]){
			j=f[j];
		}
		f[i]=j;
	}
	for(int i=1;i<=n;i++){
		cout<<f[i]<<" ";
	}
}
2024/10/18 13:07
加载中...