acwing**原題通道
題意分析:給我們1~n的排列,讓我們求出這個排列中有多少個連號區間,,連號區間也就是對這個區間排序之後,相鄰兩數相差為1。先分析資料範圍有105,那麼我們可以使用時間複雜度為o(nlongn)的演算法,如果想不出來可以考慮o(n2)的演算法。
我們先來理一下暴力的思路:
for
(列舉起點)
for(列舉終點)
對於上邊暴力的做法,我們發現列舉起點和終點這步很難去優化,那麼我們就可以考慮對判斷是否是連號區間這部操作來進行優化。
我們先來找一下連號區間的性質:
題目說給我們的是1~n
的排列,那麼1~n
之間的數肯定會不重不漏,那麼如果我們要判斷乙個區間是否是連號區間,我們只需要判斷這個區間裡邊最大值和最小值的差是否等於區間長度-1,如果等於就是連號區間;否則就不是。
舉個例子:
(1)對於132來說,這個區間最大值3,最小值1,區間長度-1為2, max-min == 2 ,所以是連號區間
(2)對於142來說,這個區間最大值是4,最小值是1,區間長度-1為2 , max - min = 3 , 不等於區間長度-1,所以不是連號區間
#include
#include
#include
using namespace std;
const
int n =
10010
, inf =
1e8;
int a[n]
;int
main()
}
cout << res << endl;
return0;
}
1210 連號區間數
傳送門 這道題是一道模擬題,首先我們應該會想到暴力做法,暴力的話,應該是兩層for迴圈,加乙個sort排序判斷是否是連號區間,sort排序的時間複雜度是o nlogn 總的時間複雜度就是o n 3logn 顯然會超時。我們想想怎麼能優化它,兩層for迴圈找區間不好進行優化,那麼我們來想想在判斷是否是...
藍橋杯2013 連號區間數
連號區間數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,...
藍橋杯C PREV 7 連號區間數
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則...