链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
负责守护镇压地震之要石的 比那名居天子\text{比那名居天子}比那名居天子 需要经常处理地震的发生 。
此地由 nnn 块地面组成,地震导致每块地面发生了不同程度的下降,天子每次释放能力可以将 相邻 的几块地面 抬高相同 的高度。
即每一次操作,可以选择任意的 L,RL,RL,R (1≤L≤R≤n)(1 \le L\le R\le n)(1≤L≤R≤n),对于所有的 i∈[L,R]i∈[L,R]i∈[L,R],使得 ai=ai+1a_i =a_i +1ai=ai+1 。
天子希望将塌陷的地面补平,你能帮她计算出将地面填平的 最小操作次数 吗。
输入描述:
第一行输入一个整数 TTT (1≤T≤1×104)(1 \le T\le 1\times 10^{4})(1≤T≤1×104),表示测试组数。 接下来 TTT 组数据: 每组数据第一行输入一个整数 nnn (1≤n≤1×105)(1 \le n\le 1\times 10^{5})(1≤n≤1×105),表示地面个数。 第二行输入 nnn 个整数 aia_iai (1≤ai≤1×109)(1 \le a_i \le 1\times 10^{9})(1≤ai≤1×109),表示第 iii 块地面的高度。 保证所有测试用例中 nnn 的总和不超过 10510^{5}105,即 ∑n≤105\sum n \le 10^5∑n≤105。
输出描述:
输出 TTT 行,每行一个整数表示最小操作次数。
示例1
输入
复制1 6 1 1 4 5 1 4
1 6 1 1 4 5 1 4
输出
复制8
8
备注:
样例 111 如图:
最终所有地面都变成高度 555,可以证明没有比 888 次更小的值了。
做法
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N],b[N];
void solved(){
scanf("%lld",&n);
int maxx=0;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),maxx=max(maxx,a[i]);
int ans=0;
for(int i=1;i<=n;i++){
b[i]=maxx-a[i];
ans+=max(b[i]-b[i-1],0ll);
}
cout<<ans<<endl;
}
signed main(){
int t;
scanf("%lld",&t);
while(t--){
solved();
}
}