AtCoder Beginner Contest 176 比赛人数9499
AtCoder Beginner Contest 176 C Step 自左向右寻找到当前位置为止的最大值
总目录详见https://blog.csdn.net/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc176/tasks/abc176_c
题目大意:给出一个序列,表示身高,要求自左到右,右边的身高不能比左边的矮,可以采用凳子的方式弥补本来的身高,人站在凳子上,请算出所有凳子的高度和。
基本思路:自左向右寻找到当前位置为止的最大值。
样例模拟如下:
Input:
5
2 1 5 4 3
Output:
4
最大 表示:自左向右寻找到当前位置为止的最大值
差值=最大-数值
位置1 2 3 4 5
数值2 1 5 4 3
最大2 2 5 5 5
差值0 1 0 1 2
求和0+1+0+1+2=4
AC代码如下:
#include <cstdio>
#include <algorithm>
#define maxn 200010
#define LL long long
using namespace std;
int a[maxn],l[maxn];
int main(){
int n,i;
LL ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++)l[i]=max(a[i],l[i-1]);//l[i]表示:自左向右寻找到当前位置为止的最大值
for(i=1;i<=n;i++)ans+=l[i]-a[i];
printf("%lld\n",ans);
return 0;
}