本題屬於簡單的implementation。
有
n
個房子,編號從左到右依次是
定義若這個房子的臺階數「嚴格大於」右邊所有房子的臺階數,那麼這個房子是「豪華的」。
依次輸出 1→n 號房子需要再增加幾個臺階才能成爲「豪華的」房子。
臺階數的增加並不是實際修改 a[i] 數組。
用數組
m[i]
維護
i→n
房子的臺階數的最大值。
即
m[i]=max{a[i],a[i+1],⋯,a[n]}
。
本題的重點是,第
i
個房子
CF的題是有special judge的。所以行末多輸出一堆空格也沒事。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+7;
long long a[maxn],m[maxn];
main(){
int n;
cin >> n;
for(int i = 1;i<=n;i++){
cin >> a[i];
}
for(int i = n;i>=1;i--){
m[i] = max(m[i+1],a[i]);
}
for(int i = 1;i<=n;i++){
if(m[i+1] == m[i]){
cout << m[i]-a[i]+1;
}else cout << m[i]-a[i];
cout << " ";
}
}