51nod1175 區間中第K大的數

2022-03-30 16:52:29 字數 1244 閱讀 4649

裸的主席樹。

#include#include#include#includeusing namespace std;

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define dwn(i,s,t) for(int i=s;i>=t;i--)

#define clr(x,c) memset(x,c,sizeof(x))

int read()

const int nmax=5e4+5;

struct node;

node *rt[nmax],ns[nmax*20],*pt=ns;

int a[nmax],b[nmax];

node* build(int l,int r)

node* update(int x,int add,node *t,int l,int r)

int query(node *t,node *s,int x,int l,int r)

int main()

int m=read();

rep(i,1,m)

return 0;

}

1175 區間中第k大的數

基準時間限制:1 秒 空間限制:131072 kb 分值: 160 難度:6級演算法題

收藏關注乙個長度為n的整數序列,編號0 - n - 1。進行q次查詢,查詢編號i至j的所有數中,第k大的數是多少。

例如: 1 7 6 3 1。i = 1, j = 3,k = 2,對應的數為7 6 3,第2大的數為6。

input

第1行:1個數n,表示序列的長度。(2 <= n <= 50000)

第2 - n + 1行:每行1個數,對應序列中的元素。(0 <= s[i] <= 10^9)

第n + 2行:1個數q,表示查詢的數量。(2 <= q <= 50000)

第n + 3 - n + q + 2行:每行3個數,對應查詢的起始編號i和結束編號j,以及k。(0 <= i <= j <= n - 1,1 <= k <= j - i + 1)

output

共q行,對應每乙個查詢區間中第k大的數。
input示例

517

6313

0 1 1

1 3 2

3 4 2

output示例

7

61

相關問題

區間中最大的數 

0

51Nod 1175 區間中第K大的數

acm模版 遇見這種題,果斷直接套模版,主席樹,也就是可持久化線段樹。這裡需要說一下,由於比較懶,我的模版求得是第 k 小,並且下標是從 0 n 所以呢,我直接在輸出時下標偏移了一,並且對 k 稍加修飾,變成了求第 r l 2 k小的數,效果是一模一樣的,就醬紫。include include in...

51nod 1175 區間中第K大的數

1175 區間中第k大的數 乙個長度為n的整數序列,編號0 n 1。進行q次查詢,查詢編號i至j的所有數中,第k大的數是多少。例如 1 7 6 3 1。i 1,j 3,k 2,對應的數為7 6 3,第2大的數為6。input 第1行 1個數n,表示序列的長度。2 n 50000 第2 n 1行 每行...

51nod1175區間第k大 小 數(主席樹模板)

分析和思路 可能最先想到的就是把l,r區間的數拿出來排序後得到答案,但多次頻繁操作時間複雜度太高,這時候強大的資料結構主席樹就發揮出它強大的作用,這就是主席樹模板題目,套模板。主席樹本質就是線段樹 又稱可持久化線段樹 可以將歷史版本保留下來。對於區間 l,r 的第k大詢問,如果我們能夠得到乙個插入原...