随笔分类 - bzoj
摘要:**tips1:**下标相关均默认在的环上 **tips2:**可能需要大量的感性理解(后面我也已经神智不清了) 设排名为,将的编号为,的编号为 记为位置上两人的编号和,则每次从移动到的人编号为
阅读全文
摘要:记为时刻当前cpu使用率,为的历史最大值 不难发现,问题即要支持:对区间赋值和区间加;查询和的区间最大值 在线段树的节点上维护和一个操作序列(类似懒标记),序列中的元素为操作(赋值或加),并
阅读全文
摘要:整体思路类似于hdu5306,在线段树上维护区间内最大值及个数、严格次大值、最小值及个数、严格次小值和区间和,即可支持查询 修改时,区间加直接维护即可,区间取的做法与该题相同—— 修改时,搜索至完全覆盖的区间后再分类讨论: 1.若修改值大于严格次大值,可以打上懒标记
阅读全文
摘要:若原图不连通,显然答案都是"Disconnected",不妨假设原图连通 任求一棵生成树,对每条非树边随机一个权值,并将树边的权值为所有"包含"其的非树边("包含"指树边在非树边两端点生成树的路径上),那么每一条边即都有一个边权 下面,只需要判定删除的边权是否存在非空子集异或和为0即可(存在即不连通
阅读全文
摘要:题目连接 暴力dp时间复杂度为,是不行的 考虑当我们强制该连通块包含根,可以直接在dfs序上dp,即若该点选则考虑从转移,否则从其子树所对应区间右端点+1来转移(即),利用单调队列优化可做到 之后对其点分治
阅读全文
摘要:首先注意题目中的一些细节问题:1.同一个区间不能累加;2.每一种寿司才能提供的代价;3.每一种代号的寿司才能贡献的代价 这些就很好的为最小割提供了条件,考虑最大权闭合子图的建图: 1.,$(id(i,j),T
阅读全文
摘要:首先朴素dp的方程,即,这中间特殊的转移只在a[i]=b[j]时,而在这道题中与a[i]相等的b[j]只有5个,考虑利用这一性质先预处理每一种数的位置,在枚举i的同时,用线段
阅读全文
摘要:考虑用f[i][j]表示以i为起点(i是时间,所以要离散)选条线段(这里不是时间)最小的终点,预处理用倍增的方式来求即可预处理出这个数组后,就可以很快的求出在的时间内最多能选多少条线段,类似于树上的倍增(注意判断超过最大时间的情况)然后从前往后枚举每一段时间,考虑能否加入,当
阅读全文
摘要:考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即可2.2种,两条横线/竖线划分,以横线为例,只需要处理处每一行的答案,然后,然后简单维护一下即可 1
阅读全文
摘要:考虑令,那么每一次操作相当于让且,相当于从i向i+1移动x个石子,那么容易发现偶数堆没有用处,因为另一方可以用同样的操作,因此问题相当于从n往前的奇数堆的nim游戏,异或即可 1 #include<bits/stdc++.h> 2
阅读全文
摘要:转化题意,如果一个点k符合条件,当且仅当k能到达1和n考虑如果l和r()符合条件,容易证明那么[l,r]的所有点都将会符合条件,因此答案是一个区间枚举答案区间[l,r],考虑如何判定答案是否合法,也就是要求满足l能到达n且r能到达1,那么预处理出f1[i]表示i能到达1的最少边数,f2[i
阅读全文
摘要:先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #
阅读全文
摘要:首先,容易发现前两项都是定值,那么就是要最小化后面的数字构
阅读全文