我们假设数组是[1, 2, 3, 4, 5],当k=3时,我们可以找到的序列是[1, 2, 3], [2, 3, 3], [3, 4, 5]。这三个序列当中的共有元素是3,并且只有3,所以3就是一个k-amazing数。第二个条件是最小,如果这样的数字可以找到多个,只有最小的那个数字才是k-amazing数。 现在给定数组a,要求所有的1-n...
然后是用主席树求区间第k大/小的板子题目 https://www.luogu.org/problemnew/show/P3834 //区间第k小#include<bits/stdc++.h>#definell long long intusingnamespacestd;constintmaxn=1e5+6; ll cnt,n,m,x,y,k,a[maxn];introot[maxn];structnode{intl,r,sum; }tr[maxn*40]; vector<int>v;v...
1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 2.树上第k大(主席树)+二分+离散化+在线查询 第二个写法是因为有板子,但是是点权的,直接边权下放到点权,然后二分找k大,然后判断找个数。第二个写法跑的慢,但是能过题就是好代码。 第二个写法模板参考来源:SPOJ COT Coun...
那么pivot位置上的数就是我们要找的第K大的数;其一:我们不必要求前K-1大的数有序,所以不必继续进行递归划分;其二:每一次的划分都将原序列分为左、右两个子序列,快排算法需要对这两个子序列都继续进行递归的划分,而在这里我们只需要根据情况(具体看算法步骤)选择一个子序列继续划分即可;因此这种求第K大的数算法...