試題 歷屆試題 連號區間數

2022-06-05 05:36:10 字數 1301 閱讀 6034

資源限制

時間限制:1.0s   記憶體限制:256.0mb

問題描述

小明這些天一直在思考這樣乙個奇怪而有趣的問題:

在1~n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是:

如果區間[l, r] 裡的所有元素(即此排列的第l個到第r個元素)遞增排序後能得到乙個長度為r-l+1的「連續」數列,則稱這個區間連號區間。

當n很小的時候,小明可以很快地算出答案,但是當n變大的時候,問題就不是那麼簡單了,現在小明需要你的幫助。

輸入格式

第一行是乙個正整數n (1 <= n <= 50000), 表示全排列的規模。

第二行是n個不同的數字pi(1 <= pi <= n), 表示這n個數字的某一全排列。

輸出格式

輸出乙個整數,表示不同連號區間的數目。

樣例輸入1

43 2 4 1

樣例輸出17

樣例輸入2

53 4 2 5 1

樣例輸出2

9這題要是沒注意到全排列的話估計會覺得挺麻煩的,我也沒想通用並查集要怎麼做,但是,題目中給出的n個數是1~n的某個全排列,也就是說,這1~n每個數都會且僅會出現一次,那麼判斷某個區間是否是連號區間的條件就簡單了:若區間(i, j)裡的最大值-最小值 = j-i,那就說明這是個連號區間. 可以直接暴力列舉.

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8

#define inf 0x3f3f3f3f

9#define zero 1e-7

1011

using

namespace

std;

12 typedef long

long

ll;13

const ll mod=1e9+7;14

const ll max_n=5e4+7;15

16int

a[max_n];

1718

intmain() 30}

31 cout32return0;

33}

34/*357

361 3 6 5 4 7 2

3738

1539

*/

試題 歷屆試題 連號區間數

提交此題 評測記錄 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l ...

歷屆試題 連號區間數

問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案...

歷屆試題 連號區間數

問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案...