acwing演算法基礎課 第一講 基礎演算法

2021-10-12 13:43:41 字數 3554 閱讀 6628

785. 快速排序

給定你乙個長度為n的整數數列。

請你使用快速排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在1~109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍

1≤n≤100000

輸入樣例:

53 1 2 4 5

輸出樣例:

1 2 3 4 5

#include

using

namespace std;

const

int n =

1e6+10;

int q[n]

;void

quick_sort

(int q,

int l,

int r)

quick_sort

(q,l,j)

;quick_sort

(q,j+

1,r);}

intmain()

給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列從小到大排序後的第k個數。

輸入格式

第一行包含兩個整數 n 和 k。

第二行包含 n 個整數(所有整數均在1~109範圍內),表示整數數列。

輸出格式

輸出乙個整數,表示數列的第k小數。

資料範圍

1≤n≤100000,

1≤k≤n

輸入樣例:

5 32 4 1 5 3

輸出樣例:

3

#include

using

namespace std;

const

int n =

1e5+10;

int q[n]

;int

quick_sort

(int l,

int r,

int k)

int sl = j - l +1;

if(sl >= k)

return

quick_sort

(l,j,k)

;else

return

quick_sort

(j+1

,r,k-sl);}

intmain()

787. 歸併排序

給定你乙個長度為n的整數數列。

請你使用歸併排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在1~109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍

1≤n≤100000

輸入樣例:

53 1 2 4 5

輸出樣例:

1 2 3 4 5

#include

using

namespace std;

const

int n =

1e5+10;

int q[n]

,temp[n]

;int n;

void

merge_sort

(int l,

int r)

while

(i <= mid) temp[k++

]= q[i++];

while

(j <= r) temp[k++

]= q[j++];

// 放回原陣列

for(

int i = l,j =

0;i <= r;i++

,j++

) q[i]

= temp[j];}

intmain()

788. 逆序對的數量
#include

using

namespace std;

typedef

long

long ll;

const

int n =

1e5+10;

int n;

int q[n]

,temp[n]

;ll merge_sort

(int l,

int r)

}while

(i <= mid) temp[k++

]= q[i++];

while

(j <= r) temp[k++

]= q[j++];

for(

int i = l,j =

0;i <= r;i++

,j++

) q[i]

= temp[j]

;return res;

}int

main()

/*

二分:1.單調一定能二分,但是二分不一定需要單調,所以單調不是二分的本質

2. 第一步:把邊界確定了

第二步:先寫乙個checked函式

第三步: 看如何更新區間:

l = mid 補上加一

r = mid 不用補

*/// 二分一定會有解,只是題目不一定有解

789. 數的範圍

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。

如果陣列中不存在該元素,則返回「-1 -1」。

輸入格式

第一行包含整數n和q,表示陣列長度和詢問個數。

第二行包含n個整數(均在1~10000範圍內),表示完整陣列。

接下來q行,每行包含乙個整數k,表示乙個詢問元素。

輸出格式

共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。

如果陣列中不存在該元素,則返回「-1 -1」。

資料範圍

1≤n≤100000

1≤q≤10000

1≤k≤10000

輸入樣例:

6 31 2 2 3 3 434

5輸出樣例:

3 45 5

-1 -1

#include

using

namespace std;

const

int n =

1e5+10;

int n,q,a[n]

;int

main()

if(a[l]

!= k)

puts

("-1 -1");

else

printf

("%d\n"

,l);}}

return0;

}

題解思路**於演算法基礎課,主講人:yxc

AcWing 演算法基礎課 動態規劃

1 揹包問題 1 01揹包 每件物品僅用一次 可以做空間優化 dp j max dp j dp j v i w i 0,1揹包狀態均是從前一迴圈的狀態轉移 2 完全揹包 每件物品可以用無限次 完全揹包的狀態可以從當前迴圈的狀態轉移,進行優化 3 多重揹包 每件物品有不同的數量限制 可以對物品的數量限...

第一講 XHTML基礎

一 html概述 超文字標記語言 是一種基本的web網頁設計語言,主要用於實現靜態的全球資訊網文件。1997年1月,html4被發布正是標準 1999年12月,w3c又推出html4.01 三 html的標記語法 1 雙標記 標記 內容 2 單標記 標記 最常用的單標記是 3 標記屬性 標記 屬性1...

Acwing演算法基礎課知識點

知識點 基礎演算法 模板鏈結常用 模板1 基礎演算法 排序 二分高精度 字首和與差分 雙指標演算法 位運算離散化 區間合併 資料結構 模板鏈結常用 模板2 資料結構 鍊錶與鄰接表 樹與圖的儲存 棧與佇列 單調佇列 單調棧 kmptrie 並查集堆 hash表 c stl使用技巧 搜尋與圖論 模板鏈結...