pat 1045 快速排序

2021-09-24 20:30:47 字數 885 閱讀 6201

著名的快速排序演算法裡有乙個經典的劃分過程:我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?

例如給定 $n = 5$, 排列是1、3、2、4、5。則:

因此,有 3 個元素可能是主元。

輸入在第 1 行中給出乙個正整數 n(≤10​5​​); 第 2 行是空格分隔的 n 個不同的正整數,每個數不超過 10​9​​。

在第 1 行中輸出有可能是主元的元素個數;在第 2 行中按遞增順序輸出這些元素,其間以 1 個空格分隔,行首尾不得有多餘空格。

5

1 3 2 4 5

3

1 4 5

兩個陣列lmax和rmin,lmax陣列存放輸入陣列中每個元素左邊最大的值,rmin陣列存放陣列中每個元素右邊最小的值

這樣如果陣列中的乙個元素大於它對應的lmax的值且小於對應的rmin的值,就表明它大於左邊的所有元素且小於右邊的所有元素,可以作為主元。

#include#includeusing namespace std;

const int n=100010;

const int inf=0x3fffffff;

int a[n],lmax[n],rmin[n];

int main()

int cnt=0,ans[n];

for(int i=0;ilmax[i]&&a[i]} printf("%d\n",cnt);

for(int i=0;iprintf("\n");//不加有乙個樣例格式出錯

return 0;

}

PAT 1045 快速排序

著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的n個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定n 5,排列是1 3 2 4 5。則 1的左邊沒有元素,右邊...

PAT 1045 快速排序

1045 快速排序 25 分 著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,...

PAT1045 快速排序 25

題目思路 1.初步我用迴圈做的,發現超時 2.思路改進,觀察給出的樣例和他的輸出 1 3 2 4 5 排序後 1 2 3 4 5 要的結果 1 4 5 是不是有點感覺了呢 3.我就按照這個思路又複製了原來的陣列,將原來的陣列排序後,遍歷對比一下,找到位置相同的,count 4.滿懷好奇,成功了幾個,...