51Nod 1175 區間中第K大的數

2021-08-05 19:16:28 字數 1158 閱讀 3866

acm模版

遇見這種題,果斷直接套模版,主席樹,也就是可持久化線段樹。

這裡需要說一下,由於比較懶,我的模版求得是第 k 小,並且下標是從 0∼

n ,所以呢,我直接在輸出時下標偏移了一,並且對

k 稍加修飾,變成了求第 r−

l+2−

k小的數,效果是一模一樣的,就醬紫。

#include 

#include

#include

using

namespace

std;

const

int maxn = 1e5;

const

int maxm = maxn * 30;

int n, q, m, tot;

int a[maxn], t[maxn];

int t[maxn], lson[maxm], rson[maxm], c[maxm];

void init_hash()

sort(t + 1, t + 1 + n);

m = (int)(unique(t + 1, t + 1 + n) - t - 1);

}int build(int l, int r)

return root;

}int hash_(int x)

int update(int root, int pos, int val)

else

c[newroot] = c[root] + val;

}return tmp;

}int query(int left_root, int right_root, int k)

else

}return l;

}int main()

init_hash();

t[n + 1] = build(1, m);

for (int i = n; i; i--)

scanf("%d", &q);

int l, r, k;

while (q--)

}return

0;}

《主席樹》

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大的數

裸的主席樹。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...

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

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