倒着加就好。
#include <bits/stdc++.h>
#define gc getchar()
#define ll long long
#define N 300009
using namespace std;
int a[N],Ans[N],n;
int read()
{
int x=1;
char ch;
while (ch=gc,ch<'0'||ch>'9') if (ch=='-') x=-1;
int s=ch-'0';
while (ch=gc,ch>='0'&&ch<='9') s=s*10+ch-'0';
return s*x;
}
int main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=read();
int Max=0,sum=0;
for (int i=n;i;i--)
{
Max=max(Max,a[i]);
sum++;
Ans[i]=Max-sum;
}
for (int i=1;i<=n;i++) printf("%d ",Ans[i]+1);
puts("1");
return 0;
}

本文介绍了一种通过倒序遍历数组来求解每个位置上的最大利润的算法实现。该算法利用C++编写,通过对输入数据进行特殊处理,实现了高效求解。核心思路是从数组末尾向前遍历,维护当前已遇到的最大值,并计算每个位置的最大利润。
743

被折叠的 条评论
为什么被折叠?



