信息學奧林匹克競賽-統計最長天數


炎熱的夏日,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.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章