題目意思很簡單,就是給你一個序列,查詢某區間第K大的數;
方法1:時間復雜度O(N*M);不支持更新操作,代碼簡單;
利用結構體排序,保留原數據的順序。
#include
#include
#include
#define N 100000
using namespace std;
/*
這個思路很好;時間復雜度O(n*m);
不過還好這個題目給的數據量不大,而且時間限制給了2s,所以可以很輕松的過;
*/
struct NODE
{
int x,id;
}node[N];
bool cmp(NODE a,NODE b)
{
return a.x=a&&node[j].id<=b) k--;
if(!k)
{
printf(%d
,node[j].x);
break;
}
}
}
}
return 0;
}
方法2:歸並樹,時間復雜度O(nlogn+mlong^3(n));利用歸並排序,用線段樹位數數組順序;
#include
#include
#include
#include
#include
#include
方法3:劃分樹;好吧,這個思路我還沒有整理好,給這個牛逼算法留一塊空地;^_^....