股票难题
时间限制: 1000MS
空间限制: 64MB
题目描述
这些日子乔治一直在研究股票,经过调研,他终于发现了某公司股票的规律。更可喜的是,乔治能推算出这家公司每天的股价。为了防止别人发现他的秘密,他决定对这家公司的股票最多买入、卖出各一次。现在他已经将股票价格列了出来,根据股票价格表,你能算出乔治的每股股票最多能赚多少钱么?
输入描述
两行,第一行nn,表示天数
第二行,用空格隔开的nn个正整数,依次表示nn天中每股股票的价格。
输出描述
输出文件只有一行,一个整数,表示每股最多赚多少钱。
样例
样例运行正确并不代表程序没有漏洞,判题服务将使用大量数据对你的程序进行评测。
输入
4 947 267 359 771
输出
504
提示
【样例说明】
- 第2天买入,第4天卖出,赚得771-267=504
【数据范围】
- 30%的数据:n≤1000n≤1000
- 60%的数据:n≤10000n≤10000
- 100%的数据: n≤1000000n≤1000000
- 100%的数据,股票价格不超过1000000000
来源
2017 NOIP山东(小学组)
#include<bits/stdc++.h>
int max(int a,int b){
if(a>=b) return a;
else return b;
}
using namespace std;
int n;
int a[1000000],nex[1000000];
int main()
{ int n,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=n;i>=1;i--){
nex[i]=max(nex[i+1],a[i]);
}
for(int i=1;i<=n;i++){
ans=max(ans,nex[i]-a[i]);
}cout<<ans;
return 0;
}
还有一种不用数组的做法
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
int ans=0;
int b=10000000000;
int a;
cin>>n;
while(n--){
cin>>a;
if(a<b) b=a;
if(ans<a-b) ans=a-b;
} cout<<ans;
return 0;
}