摘要: 做法 考虑用射线(一个点和一个向量)表示它左侧的半平面 那么我们可以先按与x轴正半轴夹角(可用atan2(y,x)实现)排序,然后再用双端队列维护当前在交中的射线即可 之所以要用双端队列,是因为新插入一个半平面时队首和队尾都有可能被弹出,而且要注意的是,要先弹队尾再弹队首 在最后,还要再用队首的弹一阅读全文
posted @ 2019-06-20 14:15 Ressed 阅读(3) 评论(0) 编辑
摘要: min-max容斥: $$max\{a_i\}=\sum\limits_{S}(-1)^{|s|-1}min\{a_i|a_i \in S\}$$ 关于证明,可以把一个数$a$看作是集合$\{1...a\}$,于是max相当于取并集,min相当于取交集,就变成了普通的容斥 然后这道题就可以dp了 然阅读全文
posted @ 2019-06-07 16:23 Ressed 阅读(8) 评论(0) 编辑
摘要: 就是求连通块的数量,可以维护一个斜着的扫描线,set里只保留在R范围内的点 然而怎么维护连通块呢。。 其实只需要向能够到的最靠左和最靠右的点连边就可以,剩下的点之前就已经连好了阅读全文
posted @ 2019-05-02 17:29 Ressed 阅读(21) 评论(0) 编辑
摘要: 考虑对非障碍的点黑白染色然后做二分图最大匹配,那么有结论,先手必胜当且仅当不是完美匹配,而且可以放的点是那些可以不匹配的点 从非匹配点开始走,后手只能走到匹配点,于是先手就可以走匹配边。由于不能走走过的点,所以现在又变成了一个非匹配点;这样下去直到后手无路可走,所以先手必胜 反观完美匹配的情况,先手阅读全文
posted @ 2019-04-27 15:53 Ressed 阅读(10) 评论(0) 编辑
摘要: 原理 给自动机上的每个点定义两种属性:[min,max]和right集合,这个点表示(长度在[min,max]的、所有出现位置的右端点的集合为right的子串) 然后可以证明,两个节点的right集合要么不相交,要么互相包含 于是,让right直接包含(某个点的right)的点作为它的父亲,可以得到阅读全文
posted @ 2019-04-26 13:48 Ressed 阅读(11) 评论(0) 编辑
摘要: 用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种split:按权值和按排名 代码 luogu3369 普通平衡树阅读全文
posted @ 2019-04-13 09:33 Ressed 阅读(26) 评论(0) 编辑
摘要: 考虑颜色比较少的时候,第一问可以直接斯坦纳树 第二问考虑二分,每次把每格的权值给成1000+[a[i]>m],就是在个数最少的基础上尽量选小于等于m的 然而颜色太多不能直接做,但可以把每种颜色映射到5以内,这样的话,做一次的正确率就是作为答案的那5种颜色分别被映射到了1~5的概率,就是$\frac{阅读全文
posted @ 2019-03-28 11:00 Ressed 阅读(30) 评论(0) 编辑
摘要: 考虑到蚂蚁们的相对位置不会变化,而且,如果把“相遇后掉头”看作是“相遇后交换编号”的话,也可以得出来最后都有哪些位置有蚂蚁 然后,只要确定哪个位置是“1”就可以了 然后搞一个指针p代表原来第一个位置的蚂蚁现在的位置(相对于0来说的),每当有蚂蚁穿过0位置,p就根据穿过的方向加加减减就可以了阅读全文
posted @ 2019-03-23 19:46 Ressed 阅读(21) 评论(0) 编辑
摘要: 求所有可能联通块的第k大值的和,考虑枚举这个值: $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[i是第K大]}}$ 设cnt[i]为连通块中值>=i的个数 $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[cnt[i阅读全文
posted @ 2019-03-10 13:00 Ressed 阅读(55) 评论(0) 编辑
摘要: 用途 可在log复杂度合并的堆 性质 每个节点有一个距离,具体定义我不知道 1.满足堆的性质 2.左子节点距离>=右子节点 3.节点距离=右子节点距离加1 实现 按照以上的性质实现merge(x,y),先选出x,y中比较大的那个(大根堆为例),再拿它的右儿子和另一个去merge,如果merge出来不阅读全文
posted @ 2019-03-06 20:27 Ressed 阅读(9) 评论(0) 编辑