码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #457 (Div. 2) 916 笔记

时间:2018-04-09 15:07:37      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:strong   简单   最大   force   增加   list   线段   进制   移除   

A. Jamie and Alarm Snooze
给出一个x<60,一个时间hh mm,求倒退多少次x能使得hh mm含7
B. Jamie and Binary Sequence (changed after round)
给出n,k (1?≤?n?≤?1e18,?1?≤?k?≤?1e5)
要求给出k个数,使得sum(2^a[i])=n(1<=i<=k),若无,输出no,要求k个数中的最大值最小,此时若还有多种情况,要求字典序最小
C. Jamie and Interesting Graph
给出n,m <1e5 求一个n点m边的简单图,使得MST为素数,1到n的最短路为素数
D. Jamie and To-do List
要求完成以下操作,n个询问,要求在线(n<=1e5)
set ai xi 将ai设置为xi
remove ai 移除ai
query ai 查询比ai优先级高的个数,xi越低,优先级越高
undo di 撤销之前di个操作
E. Jamie and Tree
给出一个n点组成的树和q组操作(1?≤?n?≤?1e5,?1?≤?q?≤?1e5)
有3种操作:
1.将根换成x
2.将包含u,v的最小子树的所有点权值加x
3.求以x为根的子树的点权和





笔记(非题解):

A 模拟
B 较复杂模拟,位数分解,贪心拆数
将n分解成二进制,1的总数为m,若m>k则无解,否则,每次尝试将最高位所有的数转化为下一位,这样的话每次最高位个数*2,直到总和超过k,此时已无解,因此倒退一步,即确定了最大的值,然后继续拆最大值,直到m=k,然后贪心放置位置即可
C 构造
先一条线串1,2,3,...,n,并且1,1,1,直到最后补成素数
然后1-2,1-3,...1-n,2-3,2-4,...2-n,...(n-1)-n用2,最后比最后的素数大
以此类推,直到凑够了m条边
D 可持久化线段树
对每条指令,维护一个变量,表示当前的版本,使用undo时直接跳到这个版本即可
E LCA 线段树 换根 树链剖分
如果没换根操作,LCA+线段树可解,加了换根操作后,分类讨论,大概想到一种用树链剖分解的方法。
求子树权值和
root不在x的子树中,不变
root在x的子树中,sum(x)-sum(root)-sum(root,x)(树链剖分)
求u,v的最长公共祖先,然后修改
如果lca(u,root)=root或者lca(v,root)=root,那么ans_lca(u,v)=root
此时直接修改所有点
否则,必不在u,v路径上,lca不变,
设lca(u,v)=t,若root不在t的子树中,直接修改子树
否则,对t的子树增加x,然后add(t,root,-x)(树链剖分), add(root,-x), add(root,x), add(t,x)

Codeforces Round #457 (Div. 2) 916 笔记

标签:strong   简单   最大   force   增加   list   线段   进制   移除   

原文地址:https://www.cnblogs.com/Surrender/p/8759024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!