摘要: #include using namespace std; const int INF=0x3f3f3f3f; int n,m,S,T,dep[10004],head[10004],cnt=0; struct node{ int to,next,w; }e[200004]; inline void add(int u,int v,int w){ e[cnt].to=v;e[cnt... 阅读全文
posted @ 2019-01-08 18:05 WiFiMonster 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 两个最基本的操作 merge合并 split分割 merge 把两棵treap合并成一棵treap,要满足T1最大值要比T2最小值小,比较将随机数值key值更大的作为合并后的根 假设T1作为根节点作为新子树的根,左子树不变,右子树对T1原来的右子树与T2再递归一次merge spilt 把一棵tre 阅读全文
posted @ 2019-01-08 16:41 WiFiMonster 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 区间第K大 阅读全文
posted @ 2019-01-08 13:35 WiFiMonster 阅读(153) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std; const int maxn=500004; inline int read() { int x=0,w=1; char ch=getchar(); while (ch'9') { if(ch=='-') w=-1; ch=getchar(); } while (c... 阅读全文
posted @ 2019-01-08 12:28 WiFiMonster 阅读(182) 评论(0) 推荐(0) 编辑
摘要: Problem 1 1.带修改的主席树+平衡树,维护前驱:每修改一个数会导致三个数的前驱改变,对每个值开平衡树,存放每个值的位置在哪 2.分块,维护前驱,开一个数组表示每个块内排序后的结果,两边暴力,中间二分 O(2s+(N/s)*logs) s=sqrt(N*logN) 法二:f[i][j]为从i 阅读全文
posted @ 2019-01-08 09:57 WiFiMonster 阅读(88) 评论(0) 推荐(0) 编辑