摘要: https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列中插入某个数,则要SplitRank到正确的位置。 注意SplitRank的写法以及Pushdown 阅读全文
posted @ 2019-08-09 20:24 韵意 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口。 无旋Treap最主要可以维护翻转序列,这个时候需要SplitRank。每次Merge前要把进入的那棵树的lazy下传,而分裂则是把p的lazy下传。 查询操作不进行修改还是非递归的版本,倒是写了很久。以后要注意,带有 阅读全文
posted @ 2019-08-09 19:16 韵意 阅读(182) 评论(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) 编辑