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大詢問,如果我們能夠得到乙個插入原...