#include
using
namespace std;
/*查詢前m個大的數字
方法有很多 直接sort函式走一波 但是這樣的複雜度是比較高
題目要求是 一共是n個數 要輸出前m個數字 時間複雜度是o(n+mlogm)
*///分治思想 將前m個數字挪到一邊 就體現了分治
voidqs(
int a,
int l,
int r ,
int m)
//陣列下標是從0開始 所以統計數字要加1
int right_num = r - j +1;
//此時算到大於m的數更多 則需要進行重新計算
if(right_num > m)
qs(a,j+
1,r,m)
;//還有m-b個數沒有
if(right < m)
qs(a,l,i,m-right);}
intmain()
;qs(a,0,4
,3);
for(
int i =
4; i >=4-
3+1; i--
)printf
(" %d"
,a[i]);
return0;
}``
分治1 輸出前m個大的數
輸出n個數中前m個大的數可以採用先排序在取前m個大的數,這個最好的時間複雜度為o nlogn 可以利用快排的思想加快時間複雜度,下面演算法時間複雜度為o n mlogm 若mint a 100 void swap int a,int b void quicksort int a,int s,int ...
前m大的數
total submission s 13762 accepted submission s 4693 problem description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表...
前m大的數
a 前m大的數 sort time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,...