题意,有个工程师想吧每个房子变成一个奢华的房子,每个房子变成奢华的,奢华房子的定义就是房子的地板的模板数成为从右往左数最大,输出每个房子变奢华的木板数
思路:从最后往前面扫描一遍,并且记录,到当前位置最奢华的房子的木板数,然后把这个点的输出变成最奢华房子的木板数-当前的然后+1,如果当前房子就是最奢华的这个点输出0
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; #define maxn 100010 int c[maxn],dis[maxn]; int main() { int n,Max = -1,x; cin>>n; for(int i = 0; i < n; i++) cin>>c[i]; for(int i = n-1; i >= 0; i--){ if(c[i] > Max){ Max = c[i]; dis[i] = 0; } else{ dis[i] = Max - c[i] + 1; } } cout<<dis[0]; for(int i = 1; i < n; i++) cout<<" "<<dis[i]; cout<<endl; return 0; }