2019.7.summary

2019.7.1
颓了几天,该回来了

BZOJ2749: [HAOI2012]外星人
phi操作的本质就是把每一个pi的指数-1,然后在乘上(pi-1)
显然最后2的指数最多
而只有phi(2)=1(不算phi(1)的话)
如果pi不等于2的话,pi-1一定会分出至少一个2的对吧
所以我们筛出把i分成只剩2需要几次f[i]
ans就是f[p[i]]*q[i]的和
注意一个细节,若果n是奇数,ans要+1,因为第一次是纯粹分出2,没有2的次数可以-1


2019.7.2
BZOJ2955: [Poi2002]敌对球迷
瞎搞?因为左端点单调的时候右端点也满足单调性鸭QAQ

Educational Codeforces Round 67 (Rated for Div. 2)
CF A. Stickers and Toys
T1日常瞎搞

CF B. Letters Shop
一眼二分题
刚看了一眼tutorial……他的方法好神啊……orz

CF C. Vasya And Array
构造题,一开始以为用并查集判合不合法,才发现naive了
直接暴力mark……
mark[i]==1表示a[i+1]必须>=a[i]
让a[i+1]=a[i]就好了,否则=a[i]-1
让a[1]=n+1
tutorial里没有暴力for循环mark,人家用的差分……我咋没想到呢QAQ

CF D. Subarray Sorting
有些难度
首先跟大多数交换两个位置的题一样,a中的第一个si一定对应的b中的第一个s’i,也就是说相对位置不变
然后按顺序枚举b中的每一个位置,找到si对应的在a中的位置p,如果有一个sj>si且在b中它在si的前面,在a中它在si的后面,那么久GG了
因为选区间只能按不降序排序,这个到不了前面
可以用树状数组实现,不过把b[i]存储在n-b[i]+1的位置

CF E. Tree Painting
这道题我想复杂了……
首先可以确定,只要根节点(第一次选的点)确定了,接下来的贡献是固定的
所以先从1为根dfs一遍答案
然后dfs每一个点换根,换根的贡献就是n–>n-sz[v] sz[v]–>n
所以就是ans-n+n-sz[v]-sz[v]+n=ans+n-2*sz[v]

所以CF题多想想再码,然后不要怕暴力,CF机子比你想的要快(逃)QAQ

BZOJ3653: 谈笑风生
木想到是用主席树
其实数据结构本身就应该把它当做实现某一功能的工具
对于询问p,k答案显然,
然后先dfs一遍,处理出dfs序,然后按dfs序建主席树,以deep为关键字,存储内容为size(不包括自身)
对于这种区间信息,满足区间减法,想想主席树

复习了BZOJ1014,splay维护hash值
&&BZOJ3223 splay翻转
往往都需要一头一尾各放一个哨兵

BZOJ2329: [HNOI2011]括号修复
从现在开始,必须消除对splay的恐惧症!!!
https://www.cnblogs.com/cjoieryl/p/8808033.html
消除可以匹配的括号后一定是)))(((这样类型的(或全是同一种),设(=-1,)=1,就是用splay维护区间最大前缀和,最小前缀和,最小后缀和,最大后缀和
注意三种lazytag的优先级
P.S对于这种题,在rotate和splay的时候不需要pushdown,因为findkth的时候已经把从根节点到当前点的路径上的都pushdown了


2019.7.3
ZROI的几题就不一一说了
对于一些题不要脑子YY,把式子列出来然面向式子想优化

BZOJ的一题卡常卡了我一页提交?mdzz
不过这题解法还是挺妙的


2019.7.4
BZOJ3809: Gty的二逼妹子序列
莫队
妙啊,不仅对询问端点分块,还对权值分块,方便统计
貌似也阔以用树状数组统计?

BZOJ3787: Gty的文艺妹子序列
分块+树状数组
为啥Claris巨巨的blog我看不懂啊QAQ我太弱了
https://www.cnblogs.com/ccd2333/p/6435480.html
还是这篇比较人性化?QAQ
感觉这种题一看就是要大力预处理啊,维护一个块内的逆序对以及用树状数组存左右端点分别在两个块的逆序对(注意不是两个块间,求两个块间的时候直接树状数组求和就好了)
在维护一个树状数组别是前i块的权值出现次数

BZOJ3744: Gty的妹子序列
把上一题的修改操作去掉,a数组要离散化
为啥我写啥常数都比别人大那么多啊???

BZOJ3407: [Usaco2009 Oct]Bessie’s Weight Problem 贝茜的体重问题
裸的背包,艹

luoguP3986 斐波那契数列
挺有意思的一道数论题呢


2019.7.5
BZOJ2874: 训练士兵
第一眼,咦这不是“上帝造题的七分钟嘛!”
噢,这数据范围?离散化以后貌似可以二维树状数组
然鹅今天学习了主席树的写法,按行建主席树
也挺方便的啊

BZOJ2599: [IOI2011]Race
点分治,t[i]表示与根距离为i的点到根的最少边数
每次枚举根的子树,每个点到根的距离为a,边为x,则用t[K-a]+x更新答案
等到把这一棵子树都calc完了再把这棵子树加到t[]里,这样就避免了起始点都在同一棵子树里的情况

BZOJ3354: [ioi2009]Hiring
按金钱/等级排序,然后用堆维护等级,贪心即可
BZOJ的是弱化版的,原题还要求方案


2019.7.6
Codeforces Round #572 (Div. 2)
CF A. Keanu Reeves
显然最多2种对吧,要么全部上,要么从第一个切开

CF B. Number Circle
画画图就知道啦
要么按顺序
要么把第n个放在第n-2和第n-1之间,不会更优了

CF C. Candies!
显然倍增

CF D1. Add on a Tree
以后这种题要先猜一个结论,然后证明它是否满足充分性与必要性
对于本题,就是没有度为2的点
必要性显然,不然这个点连的2条边权值只能相等
充分性就是如果想把一个点到某一个叶子v路径上都加一个x,只需要找到子树里另外两个叶子(注意我们的度都>=3了)L1,L2
把v到L1都加上x/2,把v到L2都加上x/2
再把L1到L2都加上-x/2,然后我们从中间往叶子那里做,这样就不会产生影响了

CF E. Count Pairs
E题贼简单,最后还没写?QAQ
显然两边乘上(a[i]-a[j])
得到数对必须满足a[i]4-k*a[i]=a[j]4-k*a[j]
然后map统计一下就好了鸭

总结:对于思维题的反应还是不够,对于结论还是不够灵敏,需要加强

BZOJ3351: [ioi2009]Regions
好题啊!
原来这叫根号分治?
对r2的大小与sqrt(n)比较分两种做法
https://www.cnblogs.com/SovietPower/p/10374799.html
orz SovietPower
对于只统计子树里的东西,可以用一下差分的手法,进去之前先减一下,出来以后再加一下

atc F - Small Products
emmmm,整数分块+dp
挺有趣的

BZOJ1500: [NOI2005]维修数列
splay,要写垃圾回收,可以用一个栈存删掉的点的编号,然后再用

BZOJ4364: [IOI2014]wall砖墙
显然线段树对吧
用线段树记录区间内l~r最高和最低的高度。父亲和儿子的数据冲突怎么办?按父亲的,因为儿子的信息是旧的,父亲的是新的


2019.7.7
BZOJ1475: 方格取数
网络流,最大独立集=总量-最小权覆盖集

BZOJ3996: [TJOI2015]线性代数
根本看不出来是网络流啊……
解法妙啊!
可以推出式子ΣΣ(a[i]*a[j]*b[i][j])-Σa[i]*c[i]
因为是a数组是01序列,所以可以代表选或不选
然后a[i]看成一个点,权值为-c[i],b[i][j]看成一个点,权值为b[i][j],与a[i],a[j]连边
然后就是求最大点权闭合子图了

BZOJ1497: [NOI2006]最大获利
把人的点权看成能赚的钱,向所需的两个中转站连边,中转站点权看成需要付的,然后显然最大闭合子图鸭
这道题的网络流还不算隐蔽?像上一题一点感觉都没有啊……

BZOJ2101: [Usaco2010 Dec]Treasure Chest 藏宝箱
显然dp对吧

BZOJ2102: [Usaco2010 Dec]The Trough Game
这数据范围……瞎搞吧

BZOJ1803: Spoj1487 Query on a tree III
显然是dfs序+主席树对吧,为啥我调题那么慢……
要多练练啊

BZOJ1468: Tree
一眼点分治题对吧QAQ
这类题通常需要注意的就是起始点在一个子树的情况,通常采用容斥或改变添加顺序
对于这题,显然容斥对吧
统计的时候可以把dis排完序以后单调性扫一遍就好了

BZOJ1907: 树的路径覆盖
树形dp啊orz,考虑某一个棵子树
根节点要么是一条链的一端点(可向上延伸),要么被子树里两条链穿过
分类讨论一下即可


2019.7.8
BZOJ3000: Big Number
结论题,当n很大时
n! ~ sqrt(2nπ)(n/e)^n
小的时候暴力算

BZOJ3932: [CQOI2015]任务查询系统
显然很主席树啊QAQ
用到差分的思想
最后一个点叶子结点注意不能直接加权值,有可能有多个同样权值的

BZOJ1116: [POI2008]CLO
和SCOI游戏很像啊
考虑每个联通量,如果边数>=点数,那么就可以(多于点数的边可以不选)
可以YY一下,很显然吧,但是如果自己想可能想不到这个啊……


2019.7.9
BZOJ5528: [BJOI2019]删数
挺有意思(nan)的一道题啊
假设现在又n个数,肯定是删掉权值为n的,若有cnt[n]个,显然删掉过以后生n-cnt个
所以用线段树维护,把[i-cnt[i]+1,i]标记为1
然后答案就是0的个数
然后单调修改很naive,区间平移本质就是询问区间的平移啊

BZOJ3015: [Usaco2012 Nov]Concurrently Balanced Strings
感觉挺有趣一道难题?QAQ
可能是因为我思维不行,想不到解法……
只能又去orz Winnie陈的blog,对着程序YY了半天才想明白……菜是原罪啊……

BZOJ3016: [Usaco2012 Nov]Clumsy Cows
之前做一道平衡树的题的时候看到过这个性质……


2019.7.10
BZOJ3017: [Usaco2012 Nov]Cow Breeds
dp啊……f[cur][i][j]表示G串前缀和为i,H串前缀和为j的方案数
emmmm,不要每次用memset,mdzz害得我调了半天QAQ

BZOJ3018: [Usaco2012 Nov]Distant Pastures
这数据范围……emmmm
死求最短路就行了……最后取最大值QAQ

BZOJ3502: PA2012 Tanie linie
orz 刘润达巨巨
https://www.cnblogs.com/liu-runda/p/6412205.html
转化成正负正负交替后显然可以费用流,因为删了一个点后就不能对两边的点进行操作了,一步一步直接堆贪心显然不是最优的,我们需要费用流能“反悔”的性质
然后liurunda巨巨blog里讲了一种支持反悔的堆贪心写法……学到了orz

2019.7.11
BZOJ3438: 小M的作物
就是感觉很网络流,但是对于组合的那个玩意儿我不会
对于组合网上题解讲的建图方法是对于每一个组合拆成ui,vi两点,s连ui,容量为c1i,ui连组合中的点,容量INF,这些点连vi,容量也为INF,vi连t,容量c2i
求最小割,然后总权和-最小割
因为如果s->ui没有满,说明这条边没有割开,说明vi->t,即这个组合中的点->t都满了,就割开了
反之亦然

BZOJ3275: Number
易推得同时满足条件的一定是一奇一偶
s连偶数,t连奇数,满足条件的点之间连inf
正如blog里所说连inf的目的就是是两个点在一个割里,使得两个点至少切掉一个

BZOJ2621: [Usaco2012 Mar]Cows in a Skyscraper
状压dp,f[i]把i这些人都送走要用的最小电梯数
g[i]把i这些人都送走,在所用电梯数最少的情况下,最后的这班电梯内的最大剩余空间

BZOJ1798: [Ahoi2009]Seq 维护序列seq
线段树裸题,考察对lazytag的理解与运用
就是add的tag和mul的tag混合时要注意一下顺序

BZOJ3555: [Ctsc2014]企鹅QQ
字符串hash,对每一个串处理出从前往后和从后往前的hash,然后暴力枚举第几个字符不一样,然后处理出新的hash,排个序直接统计
这种有点麻烦的字符串题本来就应该先考虑hash啊……

BZOJ2906: 颜色
第一眼莫队……
然后发现强制在线?QAQ
之前做过类似的(应该是GTY的妹子系列里的某一个吧……QAQ)
肯定要提前预处理出哪一块到哪一块的哪一个数的贡献
最后为了询问时两边的不完整的块,我们还要处理出哪一块到哪一块中哪一个数出现的个数

BZOJ2105: 增强型LCP
一眼splay可做
然后发现大家都暴力修改重构hash
数据水啊……
然后发现我双模hash被卡TLE,单模A了QAQ

BZOJ2296: 【POJ Challenge】随机种子
思维题啊!想不出来……
除了x=0时无解其他均有解
令a=1234567890 000000+x
则a-a%x肯定是x的倍数啊……

BZOJ2209: [Jsoi2011]括号序列
同HNOI的那道差不多(几乎一样),用splay维护最大/最小前后缀

BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
难道我会告诉你我这是再凑数?

BZOJ2565: 最长双回文串
不会(囧)
manacher+递推
对于每一个点(其实有用的是那些插进去的#,因为每个回文串的左右两个端点肯定都是#)存以他为左/右端点的最长回文串的长度
然后max(l[i]+r[i]),一开始我考虑如果是原串的位置,这样重叠了一个会不会出问题,后来想到它肯定不是最优的,对答案无影响吧……


2019.7.12
BZOJ2953: [Poi2002]商务旅行
水题,就是求两个点之间的距离

BZOJ3747: [POI2015]Kinoman
线段树
这种题……好像做过类似的?但是还是没想起来
往往都是枚举左端点或右端点,然后线段树维护另一个,移动一端时考虑变化

BZOJ1858: [Scoi2010]序列操作
线段树维护
两种lazytag,最大1/0的前/后缀
细节蛮多的呢

BZOJ1507: [NOI2003]Editor
这题大家都会splay写法
今天我学了块状链表的写法
好高级啊,一个块内用数组维护,块与块之间用链表
说到底还是分块的用处……


2019.7.13
BZOJ2821: 作诗(Poetize)
和做过的不少题套路一样,分块
预处理出每两块间的答案即从开头到每一块每一个值的出现次数
然后乱搞一下就行了QAQ

BZOJ4196: [Noi2015]软件包管理器
把每个点向他依赖的点连边,然后就是裸的路径0/1覆盖
用树剖+线段树维护一下就好了

BZOJ2951: [Poi2001]Goldmine
显然线段树+扫描线QAQ
双指针维护x,线段树维护y,对于纵坐标为y的点,把[y,y+w]都加一
最后取最大值

BZOJ1115: [POI2009]石子游戏Kam
阶梯博弈get啦QAQ
之前说过这种取石子之类的可以考虑差分
https://blog.csdn.net/qq_38678604/article/details/78886003

BZOJ1132: [POI2008]Tro
首先最朴素的n^3肯定GG
可以把所有点先按x排序
然后枚举一个三角形中最左边的点a
把a右边的点按与a连线的斜率排序,顺序扫下来用一下结合律求一下前缀和然后叉积就好了
时间复杂度O(n^2logn)

BZOJ1106: [POI2007]立方体大作战tet
好题,短小精悍还让人想不到……
首先类似于一个栈,相近的两个肯定就先消掉了
所以就是相当于动态维护一个点与它上一次出现的距离
iwtwiioi大爷好像写暴力也过了?
原来这玩意还能用树状数组维护?好神!!!涨姿势了


2019.7.14
BZOJ1121: [POI2008]激光发射器SZK
这题……我还没想到(讲实在的,我第一眼以为计算几何……)
因为光的反射原理,一个点能射到另一个点,反过来从另一个点也可以射回去
又因为所有的反射角都是45°,所以这玩意儿是一一对应的
n/2,数据都不用读完……

BZOJ1138: [POI2009]Baj 最短回文路
BFS,f[i][j]表示i,j两点间的答案
如果从i,j分别向两端枚举一个颜色一样的话,时间有可能爆炸
典型的空间换时间,先向一边延伸,然后扔到队列里BFS,再向另一端枚举


2019.7.15
Educational Codeforces Round 68 (Rated for Div. 2)
前四题不说了……
md LZ T4刚找出规律就结束了……赛后一分钟A题,警醒!

CF E. Count The Rectangles
明显树状数组+扫描线啊,感觉如果时间充裕,还是可以写的啦
先把竖线按x排序,枚举长方形的左边竖线
然后把左端点x<=当前竖线x的横线按右端点x排序,枚举右边竖线的同时,BIT动态维护横线的y

CF F. Crossword Expert
不会……
考虑最后完成了前i个
说明+1的次数dx<=min(i,T-sum[i])
并且dx+sum[i]+a[i+1]>T
dx>=max(T-sum[i]+a[i+1],0)+1
在这个区间里枚举dx,则贡献为i(1/2)^i*ΣC(i,dx)
看起来不难,还是期望概率题做少了啊!

BZOJ1202: [HNOI2005]狡猾的商人
首先只有一个区间分成几段,每段的和你都知道你才能和当前比较,
所以带权并查集,每一个点存一个当前点的前缀和-根的前缀和


2019.7.16
头好疼,不想写题
BZOJ1299: [LLH邀请赛]巧克力棒
博弈论,首先如果某些棒子异或起来能等于0
那么就把尽量多的能异或成0的棒子拿出来(意思是剩下的任选多少异或起来都不能为0)
然后如果对手再加棒子,那么你就把它吃成异或为0
如果对手吃,肯定吃不成异或为0了

BZOJ2724: [Violet 6]蒲公英
套路的分块题,果然像whx学长说的,做多了就会啦


2019.7.17
BZOJ2768: [JLOI2010]冠军调查
感觉跟二分图很像?但是没想到正解
最小割,支持的与S连1,不支持的与T连1,朋友间互相连1
割了与S,T的边就是违心,割了与朋友的边就是不同立场

BZOJ4390: [Usaco2015 dec]Max Flow
树剖或差分都可以呢

BZOJ4392: [Usaco2015 dec]Counting Haybales
线段树裸题?

BZOJ4393: [Usaco2015 Dec]Fruit Feast
dp,瞎搞一下不就好了嘛


2019.7.18
Codeforces Round #574 (Div. 2)
这场比赛挺水的啊,来从D2开始嘴吧
CF D2. Submarine in the Rybinsk Sea (hard edition)
统计位数为a[1…10]的有多少个数
对于每个数是f中第一个还是第二个讨论一下即可

CF E. OpenStreetMap
同HAOI理想的正方形,坑点就是在生成数组的时候int*int会爆QAQ


2019.7.19
以后要多注意,两个int内的数相乘可能会爆int
BZOJ3916: [Baltic2014]friends
hash,然后枚举添加的位置,然后map记录即可

BZOJ2045: 双亲数
mobius反演裸题吧……

BZOJ4397: [Usaco2015 dec]Breed Counting
水题

BZOJ2839: 集合计数
好题啊!
首先选k个数肯定有一个C(n,k)
然后就是选若干个集合,是的它们的交为空集的个数(这样添上选出的k个数不就满足了嘛)
这个直接求不好求,考虑容斥,
交有>=0个数-交有>=1个数+……
领t=n-m
这个每一项就是(-1)i*C(t,i)*(2(2^(t-i))-1)
就是选出i个交然后不包括这些交的集合有2(t-i)个,任选就是2(2^(t-i))个,因为不允许不选,所以要减一
一个小trick就是,倒着做,如果tmp’=2(2(t-i-1))-1为i+1的
那么i的tmp就=tmp’*tmp’+2tmp’
对于大多数计数题,虽然取模了,但是过程都会爆……要(ll)一下QAQ

打复杂代码最好有写写注释的习惯QAQ


2019.7.20
BZOJ3282: Tree
LCT GET啦QAQ

BZOJ2631: tree
LCT,tag的操作同线段树2
1A了呢好开心QAQ()

BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊
法一:分块
这个真的牛批啊……我都没想到……
预处理出每一个点到下一块需要的最小步数以及会跳到下一块的哪个点

法二:lct
点i的爹地是min(n+1,i+a[i]),然后维护siz就好啦QAQ
一开始一直犯一个傻逼错误,就是在query的时候你要先makeroot(n+1)才行


2019.7.21
BZOJ2049: [Sdoi2008]Cave 洞穴勘测
傻逼题,只有link,cut操作……

BZOJ1934: [Shoi2007]Vote 善意的投票
同JLOI冠军调查……最小割

BZOJ3175: [Tjoi2013]攻击装置
首先跳一次它的行列移动的总和一定是3,所以黑白染色的话跳前和跳后的点一定不是同一颜色
白色0向S连1,黑色0向T连1,能跳到的从白色向黑色连inf
然后0的个数-最小割
对于这类题,不要想太多,最大独立集=总数-最小割


2019.7.22
BZOJ3083: 遥远的国度
sb题,树剖+线段树,然后关于capital的位置讨论一下QAQ
一个sb错误调了两天……
所以这题LCT是不是也可以写啊?


2019.7.23
BZOJ2962: 序列操作
wori,这种大码量题就要练练啊……调到现在……
原来计数的时候也要开long long啊……
QAQ
ad的时候还有坑点QAQ

BZOJ2127: happiness
一眼网络流,然后不会建图(囧)
https://blog.csdn.net/lych_cys/article/details/50853553
orz了lych大爷的题解,把思想过程讲的也很详细呢orz
然后代码里面有一个细节,就是边权设为x/2的话有可能x是奇数,所以先全部当做*2算,最后在/2
因为最小割对应的是一种方案,所以/2一定是一个整数啦

BZOJ2131: 免费的馅饼
首先普通dp肯定都会,但n=1e5……
考虑i能转移到j的条件|pos[i]-pos[j]|<=2(t[j]-t[i])
pos[i]-pos[j]<=2(t[j]-t[i])&&pos[j]-pos[i]<=2(t[j]-t[i])
2t[i]+pos[i]<=2t[j]+pos[j]&&2t[i]-pos[i]<=2t[j]-pos[j]
这不就是二维偏序了嘛,树状数组维护即可

Educational Codeforces Round 69 (Rated for Div. 2)
CF D. Yet Another Subarray Problem
ri最惨的一次吧……T4都没想到(捂脸)
f[i][j]表示以i结尾,(length-1)mod m=j的最大答案
我们在j0的时候-k(相当于每m个分成一段,这是新一段的开始)
j!=0 f[i][j]=f[i-1][j-1]+a[i]
j
0 f[i][j]=max(f[i-1][m-1]+a[i]-k,a[i]-k)
边界是f[0][m-1]=0,其他的都是-INF

BZOJ2126: 排斥反应
集训队神题orz,还是爷稳稳教我的,orz爷稳稳
第一个点写0,然后向右逐个+p,向下逐个+q
一共p行q列,能对应上原来的pq个数
一开始我好奇不是有的会大于p
q吗,爷稳稳告诉我直接对p*q取模就好了
首先相邻的肯定距离是p或q,然后因为p,q互质,所以肯定取模后对应0~pq-1的所有数
然后dfs出一列的方案数,可以矩乘,a[i][j]表示第一列是第i种状态,当前的最后一列是第j种状态,然后就是a^(q-1)就好啦
神题神题啊!!!orz


2019.7.24
BZOJ3585: mex
法一:线段树,同BZOJ3339 Rmq Problem,把带权值的数组改成map就好了
法二:主席树,感觉差不多啊,第i棵树为前i个数,每个值最后出现的位置,然后维护区间最小值,最后询问[l,r]的时候在r这棵树里面找<l的最小的数即可

BZOJ2563: 阿狸和桃子的游戏
emmmm,神贪心啊……QAQ
https://www.cnblogs.com/iwtwiioi/p/4511649.html
膜了题解才想到,果然垃圾思维……
这种题套路就是考虑选或不选某个点的影响
细节就是最后排完序以后只能选第1大,第3大,第5大……,因为对手也是最优策略


2019.7.25
BZOJ2916: [Poi1997]Monochromatic Triangles
蓝书里面也有这个趣题
总的三角形数-异色三角形数,每一个点出发的两条异色边一定能构成一个异色三角形
但是一个三角形会被算两次,/2

BZOJ2258: pku2758 Checking the Text 文本校对
因为修改少,所以hash暴力重构比splay快多了QAQ(自闭)
然后注意操作二是求原串的第a,b个字符开始的,所以要记录,然后每次I操作要修改受影响的

BZOJ2212: [Poi2011]Tree Rotations
挺好的题QAQ不会……不过现在会了
咋也看不出来这是线段树合并,第一眼还以为是要满足某种贪心策略呢(囧)
首先不管一棵子树里咋排列,都不会对其他的子树产生影响(因为一个子树里所有点只能都在另一个子树里所有点的前面或后面,自己的相对顺序不影响大局)
所以从下往上合并的时候只需要考虑怎样使这棵子树最优就行了,两个儿子只有两种顺序,
所以我们对于每一个点建立权值线段树,然后ans加上两种顺序中贡献最小的
求贡献(x,y)这里要用到cdq分治的思想,只考虑x的右子树对y的左子树的影响,因为是权值线段树,所以个数直接乘就行了
然后分治做(ls[x],ls[y]),(rs[x],rs[y])


2019.7.26
BZOJ4401: 块的计数
枚举块的大小,显然整除n,然后如果我们把根及其所在的块擦去,就分成了若干个子树
YY一下这个分治的过程,显然每个块中深度最小的点的size能被块的大小整除
所以当有n/块大小个点的size是块的大小的倍数时就满足

BZOJ5518: [Zjoi2019]语言
挺好的题QAQLOJ A了,BZOJ CE?好像一堆人CE?不知道为啥,把锅先丢给BYF
一个点的贡献就是经过它的路径覆盖的总点数,最后ans/2就好了
我们对每一个点开一个动态开点线段树,树剖维护,这是对于一个点的线段树
对于所有的点,我们用差分,然后线段树合并就好了
时间复杂度有两个log,不过还是能过(听说三个log都能卡过?)


2019.7.27
BZOJ4293: [PA2015]Siano
挺好的题QAQ,思路就是不论怎么割,草的相对顺序还是按生长速度排序的(YY一下很显然吧)
所以这个可以二分一下割[pos,n]的草,然后统计一下[pos,n]的草的总数-(n-pos+1)*b
细节蛮多的,至少窝看过题解以后再码都调了好久……
记住,数据结构题最好打注释,然后一定要记得pushdown,如果有了修改,结尾还要pushup!!!

BZOJ1113: [Poi2008]海报PLA
n-可以省略的矩形数
如果两个柱子高度相同,且中间的柱子都不比它两低,那就可以省略一个矩形
所以我们维护一个单调递减的单调栈即可

BZOJ2084: [Poi2010]Antisymmetry
仔细观察会注意到这实际上就是一种回文,而且串长为偶数,所以我们跑manacher
但是我们只在插入的#的位置向左右扩展并统计答案

BZOJ3526: [Poi2014]Card
好题啊!这种线段树题我都没看出来QAQ
每一个区间的mn[0/1]表示L取正/反面时结尾最小可以取多少,不合法定为INF
然后注意pushup函数的写法即可
交换两个数,可以看成两个单点update就好了

BZOJ1529: [POI2005]ska Piggy banks
n个点,每个点都连出一条边
那么一定构成若干个基环树,一个联通快显然只要砸一个就行了
并查集即可

BZOJ1532: [POI2005]Kos-Dicing
想到了二分,没想到咋验证(囧)
最大流验证就好了QAQ
S向比赛连1,比赛向两个选手连1,选手向T连mid,如果最大流==m则可行

BZOJ1131: [POI2008]Sta
先随便找一个点dfs出它的答案
然后第二次dfs表示以这个点为根的答案
如果u,v是相邻的两点,且u已经算出来了,那么ans[v]=ans[u]+n-2*siz[v]
YY一下显然?QAQ
要开long long!!!

BZOJ1108: [POI2007]天然气管道Gaz
sb题,显然最后的总长度是一样的,sumx2-sumx1+sumy1-sumy2


2019.7.28
BZOJ2079: [Poi2010]Guilds
POI的题都好考思维啊!
如果有孤立的一个点则无解
其他的联通块我们把它看成一棵树(忽略掉多余的边),然后深度奇数和偶数黑白染色即可
我第一眼以为真的dfs染色(囧)

BZOJ2096: [Poi2010]Pilots
好题,至少我真不会……
我连单调队列都没看出来……
因为如果从左往右枚举右端点的话,左端点肯定不会向左的,所以是单调的
维护两个单调队列,一个最大值,一个最小值
队头的差如果大于k就踢掉靠前的那个,然后pos记录靠前的位置+1
以i为右端点的长度就是i-pos+1


2019.7.29
BZOJ2752: [HAOI2012]高速公路(road)
线段树
把i->i+1的边放到i这个点上,也就是n是没用的,每一次修改和查询r–
考虑一个区间内的每个点的贡献,拆开以后发现只有v[i],v[i]*i,v[i]*i^2需要维护
为毛我全开long long才能过啊……

BZOJ1513: [POI2006]Tet-Tetris 3D
二维线段树啊……好像也就是基本操作而已
二维线段树的区间修改要用标记永久化,可以理解为2个标记val和tag
val和主席树的那玩意很像,就是每次去子节点的时候都取一个max,留下了买路财,省去了pushup
tag相当于对于整个区间都修改了,省去了pushdown

接下来该练练dp了,我的dp写的跟翔一样……

BZOJ4498: 魔法的碰撞
好题啊,TM好难啊……
膜了吕欣学长的blog,学长果真牛批啊……
https://blog.csdn.net/visit_world/article/details/51090964
好不容易才看懂了QAQ这个问题的突破口和转化很巧妙,要用心体会一下
P.s但是这一题的明显套路就是从大到小的
往里面加数


2019.7.31
一道题看了两天都不会,好自闭QAQ
那就先把CF的瞎总结一下?感觉挺水的一场?QAQ
Codeforces Round #576 (Div. 2)

CF C. MP3
wori,直接乘方会GG,要慢速乘然后一旦大于n就退掉,成功FST
以后要注意这一点

CF D. Welfare State
线段树裸题吧

CF E. Matching vs Independent Set
当时没想出来QAQ我竟然往圆方树上想QAQ
按顺序枚举边,如果两个端点都没匹配的话就把它匹配了
如果有>n条边被匹配了就ojbk
否则只选择了<2n个点
还有>n个点,这些点间肯定是两两没有边的,
否则就又可以匹配一条边了,所以肯定是有解的啊

CF F. Rectangle Painting 1
原来在CF上,50^5+记忆化搜索可以过1s,QAQ
f[x1][y1][x2][y2]表示把(x1,y1)(x2,y2)这个矩形全填成白色的花费,然后分不切,横着切,竖着切来就行了
x1=x2&&y1=y2的时候贡献是a[x1][y1]==’#’

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值