CF581B Luxurious Houses

CF581B Luxurious Houses

Lionlnuc
Lionlnuc Lv4

题目链接: https://codeforces.com/problemset/problem/2113/C
题意:
有 n 座从左到右排列的建筑,其初始高度已知。对于每个位置 i(1 ≤ i ≤ n),问:最少给第 i 座建筑增加多少层,才能使其高度 严格大于 它右侧所有建筑的高度(即成为“豪华型房屋”)?
所有询问相互独立,实际高度不改变。
思路:
从后往前找,每次更新右侧楼房高度最大值,如果当前楼房比最大高度低,则在最大高度上加一层。
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int a[N];
int ans[N];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int h=0;
for(int i=n;i>0;i--)
{
if(a[i]>h)ans[i]=0;
else ans[i]=h+1-a[i];
h=max(h,a[i]);
}
for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
}
signed main()
{
int t=1;
while(t--)
{
solve();
}
}
  • 标题: CF581B Luxurious Houses
  • 作者: Lionlnuc
  • 创建于 : 2026-01-31 00:00:00
  • 更新于 : 2026-01-31 00:00:00
  • 链接: https://lionlnuc.github.io/2026/01/31/CF581B Luxurious Houses/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
CF581B Luxurious Houses