摘要: "题目链接" 直接动态开点线段树,维护所有可能出现的位置$[ m,n+m]$,并按排名排列元素,记个区间元素个数以及底层节点代表的编号,再搞个map记每个编号对应在线段树中出现的位置即可,跑的飞快,远超平衡树。 c++ include include include include include 阅读全文
posted @ 2018-01-11 20:59 BLMontgomery 阅读(199) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 首先dp很显然,$f(i,s)$表示到了第i轮,各种血量人数的情况为s今后的期望攻击boss次数。那么有$f(i,s)=\frac{1}{num+1} \sum_{s s'}(f(i+1,s')+0/1)$,num为奴隶主个数,当攻击boss时后面的贡献就是1,否则是0,s可以用一个m 阅读全文
posted @ 2018-01-07 19:19 BLMontgomery 阅读(693) 评论(0) 推荐(2) 编辑
摘要: "题目链接" 瞎jb贪一发就过了。首先度数 include include include include include include define P puts("lala") define cp cerr'9') {if(ch==' ')g= 1;ch=getchar();} while(c 阅读全文
posted @ 2018-01-06 17:36 BLMontgomery 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 题目链接 昨天晚上yy出了一个做法后,感觉...好难打啊...,于是先回去休息。今天来打时,还是感觉细节好多,于是就打了两个小时。打完过了编译后,居然过了样例,直接交,尼玛居然过了???......还好自己没有犯什么错误,不然就调死了... 进入正题 询问(x,y)时,就相当于在fail树中问x这个 阅读全文
posted @ 2017-12-07 17:14 BLMontgomery 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 题目链接 考虑dp,f(i,j)表示做到了第i位(共n位),当前的后缀串与A1~Aj相匹配 接下来的方案数。转移的话枚举一个k=0~9表示这位选什么,如果选了以后,匹配的位置会改变到 j' ,j'可以通过预处理A串的next数组(就是kmp里面的那个)然后不断向前跳得到,所以f(i,j) = ∑ f 阅读全文
posted @ 2017-12-06 21:13 BLMontgomery 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 题目链接 前面部分和lzz的题解是一样的。 首先将输入点(x,y)变为(-y,x)然后,只需找一个向量与(-y,x)的点积最大,即找一个向量在(-y,x)上的投影最长。此时所有的点都是在x轴上方的,容易发现答案一定是在凸包上的,再继续观察,如果有一个点在凸包而不在上凸包上,那么它的右上角及左上角一定 阅读全文
posted @ 2017-11-25 18:38 BLMontgomery 阅读(518) 评论(0) 推荐(0) 编辑
摘要: day1t1的结论貌似在哪见过,自己稍微验证了一下貌似没记错就没有管了。t2一道很好(keng)的模拟题啊t3自己做题好慢啊,想出来dp打上去最后几分钟才过了大样例,我写的是记忆化搜索,判-1很好判,没时间加上去了可惜了,不过还是自己做题太慢了。然后由于没拍,不确定自己dp对不对,就特判了k=0粘了 阅读全文
posted @ 2017-11-21 21:45 BLMontgomery 阅读(836) 评论(1) 推荐(0) 编辑
摘要: 题目链接 发现1操作很像lct中的access,然后它每次染的又是一个新颜色,因此同一个颜色就在同一颗splay里了,且一个点到根的权值val[i]也就是到根路径上虚边的个数,然后看access时会对哪些点的val[i]产生影响。 以下的原儿子表示原来与x在同一颗splay中的儿子 (注意不是spl 阅读全文
posted @ 2017-11-20 21:58 BLMontgomery 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 题目链接 把边按a从小到大排序,枚举一条边,相当于只考虑<=ai的边,根据b做一个最小生成树再算答案。 用lct维护这个最小生成树,要加入的这条边若会形成环,则找到x到y路径上最大的b,与当前边比较看加还是不加(加就把那条边删掉)。 维护边权可以把边看做一个点,点权为边权,并与原边的两个端点连边。 阅读全文
posted @ 2017-11-18 11:37 BLMontgomery 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目链接 单调栈&线段树 离线处理询问,首先用单调栈预处理出左边第一个大于它的数head[i]及右边第一个大于它的数tail[i],然后从左到右及从右到左各进行一遍下述操作: 从右到左枚举一个点i,作为区间的左端点,然后对于i+1到tail[i]在线段树中全部加上p2,若tail[i]不等于n+1就 阅读全文
posted @ 2017-11-15 09:33 BLMontgomery 阅读(189) 评论(0) 推荐(0) 编辑