M题,要让所有元素都变成相同的,最简单的方法就是,从左向右扫,如果右边的数大于左边的数,把所有左边的数补齐至右边的数,记录最右边补齐的值以及与右边未补齐的值的最小值
```#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef unsigned long long ull;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
template<typename T> using min_heap=priority_queue<T,vector<T>,greater<T>>;
template<typename T> using max_heap=priority_queue<T>;
template<typename T> T isqrt(const T &x){T y=sqrt(x+2); while(y*y>x) y--; return y;}
const int INF = 0x7f7f7f7f7f7f;
int a[100005];
void solve()
{
int n,sum = 0;
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
int maxn = a[1],minn = INF,k,pre = 0;
for(int i = 2;i <= n;i++)
{
maxn = max(maxn,a[i]);
if(a[i-1] < a[i])
{
sum += a[i] - a[i-1];
minn = a[i];
k = i;
}
}
for(int i = k;i <= n;i++)
{
minn = min(minn,a[i]);
}
cout << sum + maxn - minn << endl;
return;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0);
int tt;
cin >> tt;
while(tt--)
{
solve();
}
return 0;
}