
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int t;
const int N=2e5+50;
int a[N];
int main()
{
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int n;
scanf("%d",&n);
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
int cnt=0;
ll ans=0;
for(int l=0,r=0;l<n;l=r+1,r=l)
{
while (r<n&&a[r]<=a[r+1])
{
r++;
}
if(r==n)
{
r--;
}
if(a[r]>a[l])
{
cnt+=2;
ans+=a[r]-a[l];
}
}
printf("%lld %d\n",ans,cnt);
}
return 0;
}
本题坑点:longlong的输出要用lld,而不是d本题坑点:long long的输出要用lld ,而不是d本题坑点:longlong的输出要用lld,而不是d
同时要注意防止短路的问题:

最后循环的退出有两种条件,r==n或者a[r+1]<a[r]最后循环的退出有两种条件,r==n或者a[r+1]<a[r]最后循环的退出有两种条件,r==n或者a[r+1]<a[r]
如果是r==n,那么要回退一格如果是r==n,那么要回退一格如果是r==n,那么要回退一格
最后输出的时候要用lldlldlld

在C++中,输出long long整型时,应当使用%lld格式化符。此外,要注意防止短路问题。循环结束条件可能是r等于n,此时需要回退一格。最终输出时也要确保使用%lld。
4505

被折叠的 条评论
为什么被折叠?



