裸的主席樹。
#include#include#include#includeusing namespace std;1175 區間中第k大的數#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;
}
基準時間限制: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)output第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)
共q行,對應每乙個查詢區間中第k大的數。input示例
517output示例6313
0 1 1
1 3 2
3 4 2
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大詢問,如果我們能夠得到乙個插入原...