題意就是從乙個無序的陣列中找出第k大的數,由於資料很多,容易tle,而且陣列中的元素很大,用hash會mle;
解法一:
/*利用stl庫函式:nth_element(start, start+n, end)(標頭檔案是)
使第n大元素處於第n位置(從0開始,其位置是下標為n的元素),並且比這個元素小的元素都排在這個元素之前,比這個元素大的元素都排在這個元素之後,但不能保證他們是有序的。
*/#include #include
#include
#define ll long long
#define n 6000020
using
namespace
std;
inta[n];
intmain()
解法二:
/*解法二:
快排的思想:
加個優化,快排的時候把比樞軸(用來做被比較的標準數)大於等於的放在前面,小的放後面;
***********************優化重點來了**********************
若是比樞軸大的數的個數比k大,那麼只需要遞迴左邊的區域,否則遞迴右邊的區域
*/#include #include
#include
#include
#define ll long long
#define n 6000020
using
namespace
std;
inta[n],n,k;
int mysort(int left,int
right)
while( l=x)
l++;
if(l; }
}a[l]=x;
if(l==k)
return
l;
if(l>k)/*
此處的優化
*/mysort(left,l-1
);
else
mysort(l+1
,right);
}}int
main()
ACdream 1099 瑤瑤的第K大
題意 求陣列第k大的元素,直接排序會超時的,get到 nth element 這個函式 nth element 用法 nth element start,start n,end 使第n大元素處於第n位置 從0開始,其位置是下標為n的元素 並且比這個元素小的元素都排在這個元素之前,比這個元素大的元素都...
ACdream 1101 瑤瑤想要玩滑梯
沒想到線段樹的基本使用方法這麼長時間沒寫了還沒有忘,1a的感覺還是非常爽的。題目大意 中文題,點此檢視題目。解題思路 線段樹的區間更新與查詢。lazy標記的使用。當須要返回區間多個值時能夠使用引用引數。以下是 include include include include include inclu...
求數列第K大的數 ACdream 1099
求第k大的數,經常會想到主席樹,但是主席樹 複雜,操作複雜,如果說單純的求數列第k大的數,那麼就顯得優點大材小用了,就像acdream 1099 這道題目,就是求數列中第k大的數,而且如果有重複的話也算在第k大之內,例如 如果數列是,要求第一大的數,顯然就是3,第二大的數也顯然就是2,這都沒有疑問,...