上一页 1 2 3 4 5 6 7 ··· 29 下一页
摘要: 空间消耗非常玄学,有多大开多大就完事了。其实是因为单次操作可能会有数次Merge和Split操作,按照下面的版本的话Merge和Split都进行复制,所以一次操作可能复制了4个版本。 四个函数式查询,然后Merge的时候拷贝对应的xy子树,Split的时候拷贝p树。事实上,Merge和Split总是 阅读全文
posted @ 2019-08-10 04:55 韵意 阅读(132) 评论(0) 推荐(0) 编辑
摘要: https://www.luogu.org/problem/P4567 事实证明无旋Treap是不是不可能会比Splay快? cpp include using namespace std; typedef long long ll; define ls(p) ch[p][0] define rs( 阅读全文
posted @ 2019-08-10 02:44 韵意 阅读(572) 评论(0) 推荐(0) 编辑
摘要: ```cpp include using namespace std; typedef long long ll; define ls(p) ch[p][0] define rs(p) ch[p][1] const int MAXN = 100005; int a[MAXN]; ll sum[MAX 阅读全文
posted @ 2019-08-10 02:06 韵意 阅读(170) 评论(0) 推荐(0) 编辑
摘要: https://www.luogu.org/problem/P4008 无旋Treap也可以维护序列。 千万要注意要先判断p节点存在才进行Show操作,不然输出一个'\0'(或者RecBin里面的东西)草。 假如有限制同时存在的节点数量的话,UnBuild操作是显得重要的。 当然这里最主要的是类似笛 阅读全文
posted @ 2019-08-10 01:33 韵意 阅读(208) 评论(0) 推荐(0) 编辑
摘要: https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列中插入某个数,则要SplitRank到正确的位置。 注意SplitRank的写法以及Pushdown 阅读全文
posted @ 2019-08-09 20:24 韵意 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口。 无旋Treap最主要可以维护翻转序列,这个时候需要SplitRank。每次Merge前要把进入的那棵树的lazy下传,而分裂则是把p的lazy下传。 查询操作不进行修改还是非递归的版本,倒是写了很久。以后要注意,带有 阅读全文
posted @ 2019-08-09 19:16 韵意 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 多项式加减乘除取余求逆求快速幂都有了哦,加上NTT和BM都在。 cpp include define ll long long define re register define gc get_char define cs const namespace IO{ inline char get_ch 阅读全文
posted @ 2019-08-09 14:24 韵意 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 模数是998244353的话好像NTT可以更快。 cpp include using namespace std; typedef long long ll; const int MAXN = 3e5 + 51, MOD = 998244353, G = 3, INVG = 332748118; i 阅读全文
posted @ 2019-08-09 14:21 韵意 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 感觉该出14才对,取前k小写成了取前k大。 第四次询问为什么是25?明明要砍完前面所有的9棵树的。擦,curnum加的怎么是c。 cpp include using namespace std; typedef long long ll; const int MAXN = 2005; int ch[ 阅读全文
posted @ 2019-08-09 13:01 韵意 阅读(184) 评论(0) 推荐(0) 编辑
摘要: ```cpp include define N 100005 using namespace std; int n,m; int fa[N],ch[N][2],size[N],rev[N],rt; inline void pushup(int x){ size[x]=size[ch[x][0]]+s 阅读全文
posted @ 2019-08-09 11:48 韵意 阅读(256) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/131 首先假如钦定了一群人去打怪兽,那么可以把主要的任务都丢给b最大的人去打,这样不会更差。然后考虑枚举这个b最大的人,其他人陪练。一开始就是ai+k bi+sumC ci,这个很好理解,然后这个人分出至多t=k 1个怪兽给陪练团打,那么既然规定陪练团每 阅读全文
posted @ 2019-08-09 03:45 韵意 阅读(178) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/106 错在这组样例,发现是离散化之后,对k访问的时候也是应该访问离散化之后的k。 发现主席树大概还真的要开够log倍,少一点都不行,那干脆开大一点。 cpp include define mid ((l+r) 1) using namespace std 阅读全文
posted @ 2019-08-09 00:52 韵意 阅读(232) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=6638 偷学一波潘哥的二维离散化和线段树维护最大子段和。 思路是枚举上下边界,但是不需要从左到右用最大子段和dp。 用O(n)建立线段树之后,下边界在往下增长的时候,每次只会单点修改某个点的值,影响这个点的祖先。 阅读全文
posted @ 2019-08-07 19:18 韵意 阅读(260) 评论(0) 推荐(0) 编辑
摘要: include using namespace std; typedef long long ll; int n, m; int x[11], y[11], k[11], t[11]; struct Equa2 { int x, c, m; Equa2(int x, int c, int m): x 阅读全文
posted @ 2019-08-07 16:39 韵意 阅读(254) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/77 线段树的一种奇怪的应用,暴力区间更新,每次update直接pushdown到底部,然后从维护底部。这样下次update的时候假如提前遇到底部就很快返回了。每个节点更新60次,单次更新nlogn。更新完毕之后每次update都是几乎一个log就返回了。 阅读全文
posted @ 2019-08-07 11:13 韵意 阅读(157) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 29 下一页