时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一。问最少多少次操作,可以让所有数都变成1。
数据保证一定有解。
输入描述:
输入t,代表有t组数据。每组数据输入n,代表有n个数。接下来一行输入n个数,数字大小小于1e6。(t<=1000,n<1e5,∑n < 1e6)
输出描述:
每组数据输出一个整数代表最少需要操作的次数。
示例1
输入
1
6
1 3 5 2 7 1
输出
9
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+4;
ll q[maxn];
ll w[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(w,0,sizeof(w));
sizeof(q,0,sizeof(q));
int cnt=0;
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%lld",&q[i]);
}
w[++cnt]=q[1];
for(int i=2;i<=n;i++)
{
ll x=q[i]-q[i-1];
w[++cnt]=x;
}
ll sum=0;
for(int i=1;i<=cnt;i++)
{
if(w[i]>0)
sum+=w[i];
}
printf("%lld\n",sum-1);
// printf("%lld\n",cnt);
}
}