C1026 - 股票交易

题目描述

一般一家公司的股票价格是不稳定的,有时高有时低,时刻都在变化的。

下面给出在一段时间里的股票的价格数据,按照时间从先到后的顺序给出,然后请你写个程序来帮老板计算下在这段时间里买卖股票实现单股股票的收益最大化

需要注意的是股票交易需要先买入,然后再卖出,也就是先买后卖,买入时间必须早于卖出时间,只需要考虑最多只有一次交易的情况,不需要考虑多次交易的情况

输入格式

第1行,一个正整数q,代表接下来有q组测试数据

接下来有q组测试数据,每组测试的格式是:

第1行,一个正整数n,代表有多少个不同时刻(从先到后的顺序)

第2行,有n个正整数,代表每个时刻的股票的价格

输出格式

输出q行,每行代表每组测试数据中能够获得的最大的单股股票的收益是多少

如果一组测试数据中无论如何购买都不能够获得收益(收益 <= 0就是无法取得收益),则输出英文单词:No

输入输出样例

输入样例 输出样例
4
5
4 1 2 3 5
6
1 2 3 4 5 6
7
7 6 5 4 3 2 1
2
3 3
4
5
No
No

输入输出样例解释

第1行:4,代表接下来有4组测试数据

第1组测试数据:

5
4 1 2 3 5

第1行:5,代表接下来有5个不同的时刻的股票价格,可以认为是第1分钟到第5分钟

第2行:4 1 2 3 5,代表第1分钟股票的价格是4,第2分钟股票的价格是1,以此类推,到第5分钟的价格是5

这组测试数据中,在第2分钟时买入股票价格为1,然后在第5分钟时卖出,股票价格为5,这种组合可以在这段时间里让单股股票收益最大,为4(5 - 1),输出结果为:4

第4组测试数据:

2
3 3

第1行:2,代表接下来有2个不同的时刻的股票价格,可以认为是第1分钟到第2分钟

第2行:3 3,代表第1分钟的股票价格是3,第2分钟股票的价格是3,这种情况下,无论如何都无法取得收益(收益 <= 0就是无法取得收益),输出结果为:No

其他数据以此类推

需要注意的是:股票交易是先买后卖,买入时间必须是早于卖出时间的

数据范围与提示

50%的数据:$1 \le q \le 10, 2 \le n \le 1000$,每个股票的价格都在int范围内

100%的数据:$1 \le q \le 10, 2 \le n \le 10^{6}$,每个股票的价格都在int范围内

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:C1026.in,输出文件名为:C1026.out