摘要: 首先想一想只有一组询问该怎么做。 菜烂掉比较不好处理,考虑反着来,每天都有菜变多,那么就可以贪心地每天选择收益最高的$m$份菜卖掉。具体实现的话,记录每样菜在什么时候烂光,在相应的一天以$a_i+s_i$的权值插进大根堆里,每次取出堆顶时判断一下,如果当前菜是第一次卖则只卖一个,然后把它以$a_i$ 阅读全文
posted @ 2019-08-07 13:46 wangyuchen 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 首先要知道一个结论:已知一个二进制计数器,每次加一,暴力置位,均摊时间是$O(1)$的。 相似地,用会计分析或势能分析可以证明一个更强的结论:每次在计数器某一位上加一,复杂度仍为$O(1)$。所以,设数总长为$L$,若$a$始终不小于零,则我们得到一个$O(Lloga)$的方法。 但这道题要求支持减 阅读全文
posted @ 2019-08-06 15:07 wangyuchen 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 一个显而易见的性质是答案不大于2(角上的跳蚤最多与两个相邻) 继而发现答案其实只可能是-1,0,1,2(废话),分类讨论: -1:$nm-c<2$或者$nm-c=2$且剩下的两只跳蚤相邻; 0:原图不连通; 1:原图联通且有割顶; 否则为2。 但$n,m\le 10^9$这种数据范围肯定不能直接做了 阅读全文
posted @ 2019-08-05 14:29 wangyuchen 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 首先,家和工作单位在同岸的人不用走桥,以下只讨论家和工作单位在对岸的情况,记第$i$个人家在$a_i$,工作单位在$b_i$(具体哪一岸对答案无影响) $k=1$时明显是中位数。 $k=2$时,考虑把这些人分为两组,分别取中位数走就可以了。 可以发现每个人走的距离和$\frac{a_i+b_i}{2 阅读全文
posted @ 2019-08-05 14:01 wangyuchen 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 首先这个$dep[LCA(i,z)]$肯定不能直接求,考虑把它转化,发现$dep[LCA(i,z)]$就等于把$i$到根的路径上的点涂黑后,$z$到根路径上黑点的个数。推而广之,$(l,r,z)$对应的答案就是对于所有$l\le i\le r$的$i$,将$i$到根的路径上的点权值+1后$z$到根的 阅读全文
posted @ 2019-08-02 14:05 wangyuchen 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 首先如果是边权的话很明显是kruskal重构树了,那么类比,点权也可以用类似的方法搞,只不过把枚举边换成了枚举点 然后建两棵树跑树上倍增就可以得出一个点最多可以到达那些点,我们的目标是判断是否存在一个$u$使得$u$到$S$和$E$均联通。 那么考虑把两颗树的$dfs$序求出来,那么问题就变成了已知 阅读全文
posted @ 2019-08-01 13:23 wangyuchen 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 不会维护区间的Splay QAQ。题目n这么大,直接维护是肯定不行的,考虑维护区间内删去的点,那么减一下就是区间内原有的点,可以解决第k大和排名,至于按编号检索,用两个map维护编号和线段树位置之间的关系,修改时维护一下即可。 #include<cstdio> #include<map> using 阅读全文
posted @ 2019-07-31 14:11 wangyuchen 阅读(170) 评论(0) 推荐(0) 编辑
摘要: LCT板子题。。。维护区间乘、区间加、区间反转(LCT自带)三个标记,维护就可以了。 #include<cstdio> #include<cctype> typedef long long ll; const int mod=51061; const int N=100050; char rB[1< 阅读全文
posted @ 2019-07-31 14:05 wangyuchen 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 给定一棵树,已知每个点的$access$次数,求虚/实边切换次数的最大值。首先不考虑修改,设一个点$u$修改次数为$a_u$,下属子树的总修改次数为$S_u$,$h_u=\max(a_u,\max{S_v}\text{(v为u的子节点)})$,则可知$2h_u>S_u$时,$u$结点的最大冲突次数为 阅读全文
posted @ 2019-07-29 14:28 wangyuchen 阅读(194) 评论(0) 推荐(0) 编辑
摘要: Day -n ccf居然咕了这么久才发账号QAQ Day 1 开题,t1:好像只会$O(nt^2)$,t2:懵逼,t3:懵逼。 那我岂不要爆炸 先做t1。打完暴力发现这个东西好像可以离散化?一算复杂度好像是$O(mt)$,赶紧码码码,最后弄出了个$vector$套$vector$配合$dijkstr 阅读全文
posted @ 2019-07-28 16:02 wangyuchen 阅读(266) 评论(0) 推荐(0) 编辑