算法竞赛入门经典训练指南打卡
题目链接:UVA 11078
思路
因为i是肯定再j前面的,所以我们只需要对输入的数进行处理
首先上第一个数据作为i,之后每输入一个数据
先假设其为j,查看差值然后将最大的差值存入ans中
再更新i,让i为最大值即可
具体细节见代码注释
代码如下:
#include <iostream>
using namespace std ;
const int INF = 10e6 ;
int main(){
int i , t , n , x ;
cin >> t ;
while (t --){
int ans = -INF ;
cin >> n ;
cin >> i ; //首先选第一个数据作为i,因为j不可能是第一个数据
n -- ;
while (n --){
cin >> x ;
ans = max(ans , i - x) ; //更新ans,使其保证最大
i = max(i , x) ; //更新i,使其保证最大. 因为i是在ans之后更新的,所以能够保证不会出现i - i的情况甚至i - i前面的数的情况
}
cout << ans << endl ;
}
return 0 ;
}