!!!2024年西南科技大学新生赛 :有顶天变~

链接:登录—专业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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值