09 2019 档案
摘要:题意 给2n个物品,分别有a,b属性,对于i=1...n,选择i个a属性和i个b属性,且每个物品只能作为一种属性的贡献,求最小的值。 分析 看了题解补了两天... 应该叫做可反悔的贪心,或者其实就是网络流?不过因为是特殊的图,所以可以用优先队列来优化。 维护四个优先队列,
阅读全文
摘要:B Buffoon 判断最大值是不是第一个数,签到题。 H Hour for a Run 输出nm的10%到90%,签到题,注意别用浮点数和ceil,有精度问题。 M Maratona Brasileira de Popcorn 题有点难读,就是给n个数,m个人,每人分一个连续段,
阅读全文
摘要:题意 给定两个排列a和b,两种操作,交换b_i和b_j,询问a[l_a...r_a]和b[l_b...r_b]有多少个数相同。 分析 由于给的是排列,保证b的每个数都有a的对应,构造数组c,c[i]表示b[i]在a数组中的位置。 所以询问就变成询问c[l_b...r_b]中有多少个值域为[l_a..
阅读全文
摘要:题意 给定n个数,每次交换两个数,输出交换后的逆序数。 分析 交换两个数只会影响到对应区间内的逆序数,具体为减少区间[l+1,r1]中比a[r]大的数的个数,增加比a[r]大的数的个数,减少比大的数的个数,a[l]增加比a[l]小的数的个数。 转化为单点修改+查询区间值域个
阅读全文
摘要:题意 给定一个序列,多次询问区间[l,r]中满足min(a[i],a[j])==gcd(a[i],a[j])的数对(i,j)数。 分析 其实就是求区间有倍数关系的数对数。 由于序列是全排列,所有有倍数关系的数对数只有nlogn个,因此可以暴力求出所有数对,然后对询问离线,转化为二位偏
阅读全文
摘要:题意 给定一个序列,两种操作,单点修改,询问区间[l,r]值域在[x,y]范围内的连续段个数。 分析 原数组为a,构造一个新的数组b,b[i]=(a[i]==a[i1])?0:a[i],这样将连续段转化为左端点的一个数来表示。 询问就可以转化为维护b数组,单点修改和询问区间
阅读全文
摘要:A Who is better? 题意 excrt+斐波那契博弈 分析 Java的BigInteger对象默认为null,不能直接比较。 代码 D Carneginon 题意 给一个串T和多个串S,根据长度大小和是否为子串判断输出。 分析 题目说明的复杂度刚好就是暴力KMP。 代码 c++ incl
阅读全文
摘要:题意 给定一个序列,定义 连续区间 为区间的数排序后,任意两个相邻的数之差不超过1。 分析 假设区间最大值为max,最小值为min,不同数个数为cnt,那么问题转化为求满足maxmincnt==1的区间个数。 统计满足条件的区间个数可以考虑用线段树,主要有三个步骤: 枚举右端点$
阅读全文
摘要:题意 ~~题意不明~~,队友告诉我对于每个i,所在下标p[i],在[p[i]k,p[i]+k]中找到小于i的最大数x,然后ans[i]=ans[x]+1即可。 分析 第一种方法无脑主席树,求区间小于某个值的最大数。 第二种方法是线段树,因为对于每个数i,只有比他小的数才
阅读全文
摘要:题意 有一棵树n个节点,每个节点有一个防御值,以及两个属性,表示一个骑士占领该节点后攻击值是加还是乘,有m个骑士,有初始位置和初始攻击值,如果攻击值大于该节点的防御值,就能占领该节点,然后更新攻击值,走到父节点,如果攻击值小于防御值,骑士就会死在该节点。 问每个骑士能占领多少个节点,以及每个
阅读全文