O2的算法会超时
可以这样:
让maxv为到目前为止的分数最大值,如果maxv-当前分数>ans,则ans=maxv-当前分数.
最后再来一次扫描两个相邻之间的最大差值,避免完全递增或者相等的情况,因为如果是完全递增或者相等的情况话每次maxv都会被更新为当前分数,差值就会为0
#include <iostream>
#include <memory.h>
#include <cstdio>
#include <limits.h>
using namespace std;
#define MAX 100010
int val[MAX],n;
int main(){
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
int ans1=-INT_MAX,maxv=-INT_MAX,ans2=-INT_MAX;
for (int i=0;i<n;++i)
{
scanf("%d",&val[i]);
if(val[i]>maxv)maxv=val[i];
else if(maxv-val[i]>ans1)ans1=maxv-val[i];
}
for (int i=0;i<n-1;++i)
{
if(val[i]-val[i+1]>ans2)ans2=val[i]-val[i+1];
}
printf("%d\n",ans1>ans2?ans1:ans2);
}
return 0;
}