随笔分类 - 基本算法 差分
摘要:【题目】F - Yakiniku Restaurants 【题意】给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终点的最大(收益-代价)。n<=5000,m<=200。 【算法】单调栈+矩阵差分 【题解】直接枚举区
阅读全文
摘要:【题意】n个点的树,m条链,求将一条边的权值置为0使得最大链长最小。 【算法】二分+树上差分 【题解】 最大值最小化问题,先考虑二分最大链长。 对所有链长>mid的链整体+1(树上差分)。 然后扫一遍,对[在所有不满足链上]的边取最大值并check。 具体做法:对于二分的最大链长,将所有链长>mid
阅读全文
摘要:【题意】n头牛,其中最高h。给定r组关系a和b,要求满足h[b]>=h[a]且a、b之间都小于min(h[a],h[b]),求第i头牛可能的最高高度。 【算法】差分 【题解】容易发现r组关系只能包含或不相交。 先假设所有牛是最高高度。 对于一组关系(a,b)显然只需要让区间[a+1,b-1]整体-1
阅读全文
摘要:第一题 题意:给定n*m网络,定义两个棋子在同行同列则相互攻击,同时要求两个棋子的行和列不能一小一大,求满足条件的最大摆放的方案数。 题解:ans=C(max(n,m),min(n,m)),就是在max中取min个数字的组合,组合内排序构成一种方案。 #include<cstdio> #includ
阅读全文
摘要:【关键字】偏序,数点,树状数组,线段树,扫描线。 因为涉及多种算法,所以整合到一起。 【扫描线】 二维数点,偏序 ★数点问题 ★关于偏序问题的一些总结 扫描线是一维离线的做法的统称,常用于解决k维偏序问题。 离线:将其中一维的询问排序后按顺序处理,从而实现按时间顺序处理的过程中可以O(1)统计空间上
阅读全文
摘要:【算法】扫描线:差分+树状数组 【题意】转化模型后:求每个矩形覆盖多少点和每个点被多少矩形覆盖。n<=10^5。 【题解】经典的扫描线问题(二维偏序,二维数点)。 数点问题 将所有询问离线并离散化,然后按从上到下排序。 对于点被覆盖问题: 扫描线从上到下进行,遇到矩阵上边界维护区间加,遇到矩阵下边界
阅读全文
摘要:【算法】树链剖分+线段树(区间加值,区间求和) 【题解】http://hzwer.com/3891.html 中间不要取模不然相减会出错。 血的教训:线段树修改时标记下传+上传,查询时下传。如果修改时标记不下传,下面的结果就会覆盖上面的标记上传造成的影响。 读入后全部排序(离线处理) 链剖之后按顺序
阅读全文
摘要:【算法】离散化 【题解】 答案一定存在于区间的左右端点、与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化)。 让某个点的前缀和表示该点的答案。 初始sum=∑c[i] 在l[i]处加上a[i]-c[i],在r[i]+1处加上b[i]-a[i]。 从左到右计算sum并比较出最大值
阅读全文
摘要:【算法】线段树||二分+前缀和 【题解】线段树记录区间加值和区间最大值。 #include<cstdio> #include<algorithm> using namespace std; const int maxn=1e6; struct treess{int l,r,ms,delta;}t[m
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文