最多能完成排序的塊題解

2021-10-07 16:13:31 字數 1456 閱讀 8487

沒有

陣列arr是[0, 1, …, n - 1]的一種排列,我們將這個陣列分割成幾個「塊」,並將這些塊分別進行排序。之後再連線起來,使得連線的結果和按公升序排序後的原陣列相同。

我們最多能將陣列分成多少塊?

輸入格式

共兩行。

第一行為正整數n,代表陣列有n個數。

第二行為n個整數。

輸出格式

最多能將陣列分成的塊數。

樣例1輸入

5 4 3 2 1

樣例1輸出

解釋:將陣列分成2塊或者更多塊,都無法得到所需的結果。

例如,分成 [5, 4], [3, 2, 1] 的結果是 [4, 5, 1, 2, 3],這不是有序的陣列。

樣例2輸入

2 1 3 4 4

樣例2輸出

解釋:我們可以把它分成兩塊,例如 [2, 1], [3, 4, 4]。

然而,分成 [2, 1], [3], [4], [4] 可以得到最多的塊數。

arr的長度在[1, 2000]之間。

arr[i]的大小在[0, 10^8]之間。

我們可以用兩個陣列:乙個原陣列,乙個已經排好序的陣列來檢查到第i位時是否已經排好

如樣例二:

第一位不一樣,不管

第二位,前兩個數一樣,已經完成了此塊的排序,ans++,可以多分一塊

第三,四,五個也是如此,既然都一樣,那麼都是ans++,分出三塊

那麼怎麼比前這麼多位的數字相同呢?只需要字首和就搞定了。

那麼有人會問,如果兩個不一樣但和相等呢?

這其實是沒有影響的,比如2,2和1,3,雖然和相等,但是1肯定排在前面,2在後面,兩個不會在一起比較,沒有影響

另外也可以用標記的方法,但我不會

**:

#include

#include

using

namespace std;

int n,a[

2005

],k=

0,b[

2005

],f=

-1000

;int

main()

sort

(b+1

,b+n+1)

;for

(int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++

)printf

("%d"

,k);

return0;

}

順便一提這道題l老師十分鐘就做出來了,果然我跟大佬的差距還很大,要加油鴨!

單調棧 雜湊表 768 最多能完成排序的塊 II

2020 05 13 09 38 46 問題描述 這個問題和 最多能完成排序的塊 相似,但給定陣列中的元素可以重複,輸入陣列最大長度為2000,其中的元素最大為10 8。arr是乙個可能包含重複元素的整數陣列,我們將這個陣列分割成幾個 塊 並將這些塊分別進行排序。之後再連線起來,使得連線的結果和按公...

malloc最多能分配多大的記憶體空間?

malloc的全稱是memory allocation,中文叫動態記憶體分配,用於申請一塊連續的指定大小的記憶體塊區域以void 型別返回分配的記憶體區域位址,當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。void 型別表示未確定型別的指標。c,c 規定,vo...

使用python測測你的系統最多能建立多少個執行緒

使用python測測你的系統最多能建立多少個執行緒 2012 12 09 08 27 00 收藏 使用乙個迴圈,不斷的建立執行緒,直到出現異常,才通知它們。python真是個好東西。如下 usr bin env python coding gbk import threading import ti...