Tomislav 最近发现自己的身材完全走样了,她走楼梯都变得很累。
一天早上她起来以后,她决定恢复姣好的身材。她最喜欢的运动是骑自行车,因此她决定在本地的小山上做一次旅行。
她骑自行车的路线可以描述为 n 个数字的数列,每个数字表示每一段路地海拔高度。
Tomislav 最感兴趣的是最长的高度一直上升的子序列,她称这一段路为爬坡,Tomislav 只想考虑这段爬坡的高度差(即开始和最后的数字的差距),而不是什么路程长度。
一段爬坡路被定义为长度至少为 2 的连续的非下降子数列。
例如,我们考虑如下路线数列 12 3 5 7 10 6 1 11,这里有两个爬坡,第一个爬坡(3 5 7 10)的高度差是 7,第二个爬坡的高度差是 10(1 11)。
帮助 Tomislav 计算高度差最大的爬坡的高度差。
输入格式
输入包含多组测试数据。
每组数据第一行包含整数 n。
第二行包含 n 个整数 p1,p2,…,pn,表示路线数列。
输出格式
每组数据输出一行结果,表示最大高度差。如果不存在爬坡,则输出 0。
数据范围
每个输入最多包含 100 组数据。
1≤N≤1000,
1≤pi≤1000
输入样例:
5
1 2 1 4 6
6
10 8 8 6 4 3
输出样例:
5
0
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N],n;
int main()
{
while(cin>>n&&n!=-1)
{
int res=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;)
{
int j=i+1;
while(j<n&&a[j]>=a[j-1]) j++;
res=max(res,a[j-1]-a[i]);
i=j;
}
cout<<res<<endl;
}
return 0;
}