题意:n座建筑从左到右排列,给你每座建筑的层数,n次询问,每次需给出对于第i座建筑,我们需要增加多少层,才能使得该建筑右边的所有建筑都比它矮
解题思路:其实该题还是比较简单的,要求需要增加多少层才能比右边所有的建筑高,那么我们只需找到右边最高的建筑就可以了,这样需增加的层数为hmax+1-hi(该值若为负数,则直接记为0,表示不用添加层数就已经被右侧建筑高),这样的话,我们只需从右向左遍历,时刻记录最大值,再对第i座建筑进行处理即可
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<stdlib.h>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
#define exp 1e-10
using namespace std;
const int N = 100001;
const int inf = 1000000000;
const int mod = 2009;
int s[N];
int main()
{
int n,i,Max,k;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
for(Max=s[n],s[n]=0,i=n-1;i>0;i--)
{
k=Max+1-s[i];
Max=max(Max,s[i]);
s[i]=k<0?0:k;
}
for(i=1;i<=n;i++)
printf("%d%c",s[i],i<n?' ':'\n');
return 0;
}菜鸟成长记
本文探讨了在Berland首都独特多层建筑布局中,如何通过精确的层数调整,使每一栋建筑成为其右侧建筑的视觉焦点。通过独立的分析,解答了关于如何增加层数以确保建筑奢华性的复杂问题。
1343

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



