您的位置:首页 > 其它

信息学奥林匹克竞赛-统计最长天数

2015-10-27 16:05 253 查看
炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。

经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。

现在,他想知道最高气温一直上升的最长连续天数。

输入格式:

第1行:一个整数N。1<=N<=10^7

第2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。

输出格式:

第1行:一个整数,表示最高气温一直上升的最长连续天数。

输入:

10

1 2 3 2 4 5 6 8 5 9

输出:

5

var
i,j,n,max,counter:longint;
a:array[1..10000000] of longint;

begin
assign(input,'in.txt');
reset(input);
readln(n);
for i:=1 to n do read(a[i]);

max:=0;
for i:=1 to n do
begin
counter:=1;
for j:=i to n do
begin
if a[j]>=a[j+1] then
begin
break;
end
else
begin
counter:=counter+1;
end;
end;
if counter>max then max:=counter;
end;
writeln(max);
end.

以上代码虽然易懂,但是有个很严重的超时问题,我们使用了二重循环,使得算法复杂度在O(n^2)。

以下算法将复杂度降到O(n)

var
i,n,max,counter:longint;
a:array[1..10000000] of longint;

begin
assign(input,'in.txt');
reset(input);
readln(n);
for i:=1 to n do read(a[i]);

max:=0;
counter:=1;
for i:=1 to n do
begin
if a[i+1]>a[i] then
begin
counter:=counter+1;
end
else
begin
counter:=1;
end;
if counter>max then max:=counter;
end;
writeln(max);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: