![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治算法
文章平均质量分 59
alan_cty
蒟蒻一只
别打脸(⊙o⊙)哦
展开
-
【GDKOI2017模拟1.12】与运算
Description给出一个序列,Fi为前i项进行and运算之后的值。求这个序列的一个排列,使得∑Fi\sum Fi最大。 输出这个最大值。 n<=10^6Solution首先考虑F数组,显然是单调不升的。 那么我们考虑Dp,Dp i表示F数组目前最后一位为i的最大和。注意可以不放满。 那么我们枚举一个数转移,复杂度是O(N^2)的。 转移的话我们可以预处理cnt[i]表示有多少个数a原创 2017-01-16 21:59:54 · 510 阅读 · 0 评论 -
[bzoj4700]适者
Description给出n个人,每个人有血量T和攻击力D。 你自己可以看做有无限血量和A的攻击力。 战斗为回合制进行,每一回合你先选择一个敌人攻击,将其血量减少你的攻击力的数值。 若一个人的血量<=0则死亡。 然后所有存活的敌人对你进行攻击,每个人对你造成D的伤害。 在战斗开始前你可以先秒杀两个敌人。 求你所受伤害的最小值。 n<=3*10^5,T,D,A<=10^4Solution原创 2017-01-18 21:14:30 · 717 阅读 · 0 评论 -
[51nod1810]连续区间
Description给出一个1~n的排列,求有多少个区间将区间内所有元素排序后,任意相邻两个元素值差为1 n<=1e6Solution个人认为马拉松26中最可做的一道题(然而还是没有做出来 考虑分治,也就是我们要统计左端点在[l,mid],右端点在[mid+1,r]的区间个数 设max[i]表示i到mid的前缀/后缀max,min[i]表示i到mid的前缀/后缀min 设区间左端点为i,右原创 2017-07-09 19:59:07 · 916 阅读 · 0 评论 -
[51nod1824]染色游戏
Description有 n 个红球, m 个蓝球,从中取出 x 个红球和 y 个蓝球排成一排的得分是 rx⋅by ,其中 r0=b0=1 。 定义 f(t) 表示恰好取出 t 个球排成一排的所有可能局面的得分之和。 两个局面相同,当且仅当这两排球的个数相等,且在对应列位置上的颜色都是相同的。 求有多少 t (1≤t≤n+m) 使得 f(t) 是奇数,为了防止输出过大输出所有的t^2之和 n原创 2017-11-08 16:34:31 · 711 阅读 · 0 评论 -
【WC2016模拟】几何
Description n<=60000,T<=5 时限0.8SSolution忽略掉题面最开始三个字 显然这题分为两部分 第一部分是求出Dp[i]表示i-多面体的选择方案数。 第二部分是把Dp[1]~Dp[n]组合起来。第二部分显然可以用分治FFT来搞(求n个一次多项式的乘积),我们来看第一部分 考虑Dp[n],枚举棱上选了多少条边,Dp[n]=∑4k=0Ck43k∑6n−12+ki=原创 2017-12-25 22:46:52 · 316 阅读 · 0 评论 -
Try to find out the wrong in the test
Description有n个人排成一排,你需要对这n个人分组,每组必须是连续的一段。 每个人有要求,(c[i],d[i])表示这个人所在的组的最少人数和最多人数。 求最多能分成多少组和方案。 nSolution如果只有d的限制这道题就很好做了。 因为d限制了我们i只能从i前面的一段区间转移过来,不妨设为left[i],显然left是单调的 但是有c的限制就很麻烦了,因为c原创 2018-01-15 17:31:55 · 474 阅读 · 0 评论 -
[CF576E]Painting Edges
Description给出一张n个点m条边的图,有k种颜色,给出q次操作,每次操作形如“将第i条边染成颜色c” 如果某一次操作之后会使得对于颜色c,只考虑颜色c的边,原图不是一个二分图,那么这次操作无效(即不会进行染色) 求每次操作是否成功。 n,m,q<=5*1e5,k<=20Solution首先这是一个动态二分图的问题,可以直接通过并查集+分治做到两个log 具体来说每条边有出现时间区间原创 2018-03-07 22:15:54 · 644 阅读 · 0 评论 -
[ARC 063 F]Snuke's Coloring 2
Description给出一个wxh的网格图,和n个点,求一个周长最大的矩形,满足这个矩形内部没有点。注意矩形边界上不算在内部。 n<=2*1e5Solution首先让我们来想一个分治做法。 分治了一条中线,我们想要求出跨过中线的答案。 那么对于中线上下两侧,我们做两个单调栈,用扫描线维护当前的右端点,然后左端点只能在单调栈上。 当然你不能暴力求上下单调栈是哪个,我们可以用线段树来维护每一段原创 2018-04-05 11:27:40 · 605 阅读 · 1 评论