股票问题
Description
有个姓胡的师傅,工作之余喜欢炒股,而且还小有暂获。胡师傅通过长期的观察,发现了股票有点小规律,他把自己发现的规律叫做“波浪理论”,通俗地说,股票是一波一波好像大海里的波浪一样的,有涨有跌,跌跌涨涨的,每一波的涨幅和跌幅也有不同,在这里我们规定一个波段指的是连续涨或者连续跌,如果连续两天出现大盘指数一样时,可以算涨(在涨的波段内算涨),也可以算跌(在跌的波段内算跌),胡师傅认为刻画股市是不是“牛”,要看连续涨的天数和波段涨幅的乘积的大小,他把这个大小的值戏称为股市的风向标,请你帮胡师傅写个程序,算一算在所有的一波一波的波段中风向标最大值是多少。
Input
本问题有多组测试数据,每一组共有二行,第一行是天数n(1<=n<=100000),表示股票大盘指数是按天计算的,一天一个指数;第二行是n个整数,表示每天的大盘指数的值,范围是1和10000之间。
Output
对于每组测试数据,输出只有一行,即在所有的一波一波的波段中风向标的最大值。
Sample Input
6
2000 1900 2100 2300 2700 2500
Sample Output
2400
#include<bits/stdc++.h>
using namespace std;
int a[100002];
int main()
{
int n,mx,i,f,t;
while(cin>>n)
{
mx=-999999999;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
f=t=1;
a[n+1]=0;
for(i=1;i<=n;i++)
{
if(a[i]<=a[i+1])
{
t++;
}
else
{
if(mx<(a[t]-a[f])*(t-f))
{
mx=(a[t]-a[f])*(t-f);
}
f=i+1;
t=i+1;
}
}
cout<<mx<<endl;
}
return 0;
}