07 2019 档案

摘要:Longest Subarray "题目传送门" 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过。给定区间内的数字范围是1~c。 如果r为右边界,对于一种数字x,满足条件的左边界l的范围是r左边第一个x出现的位置+1(即这段区间内没有出现过x,如果x在1~r 阅读全文
posted @ 2019-07-31 10:19 whisperlzw 阅读(281) 评论(0) 推荐(2)
摘要:Fansblog "题目传送门" 解题思路 Q! % P = (P 1)!/(P 1) ... (Q 1) % P。 因为P是质数,根据威尔逊定理,(P 1)!%P=P 1。所以答案就是(P 1) ((P 1) ... (Q 1)的逆元)%P。数据很大,用__int128。 代码如下 cpp inc 阅读全文
posted @ 2019-07-30 20:06 whisperlzw 阅读(241) 评论(0) 推荐(1)
摘要:Find the answer "题目传送门" 解题思路 要想变0的个数最少,显然是优先把大的变成0。所以离散化,建立一颗权值线段树,维护区间和与区间元素数量,假设至少减去k才能满足条件,查询大于等于k的最少数量即可。 代码如下 阅读全文
posted @ 2019-07-30 19:57 whisperlzw 阅读(222) 评论(0) 推荐(1)
摘要:Distribution of books "题目传送门" 解题思路 求最大值的最小值,可以想到用二分答案。 对于二分出的每个mid,要找到是否存在前缀可以份为小于等于mid的k份。先求出这n个数的前缀和sum\[],dp\[i]表示前i个可以构成的最大份数。初始化dp\[1~n]为 1,dp\[0 阅读全文
posted @ 2019-07-30 17:08 whisperlzw 阅读(219) 评论(0) 推荐(0)
摘要:sequence "题目传送门" 解题思路 用单调栈求出每个a\[i]作为最小值的最大范围。对于每个a\[i],我们都要乘以一个以a\[i]为区间内最小值的对应的b的区间和s,如果a\[i] 0,则s要尽量大,如果a\[i] define INF 5223372036854775807LL usin 阅读全文
posted @ 2019-07-29 11:03 whisperlzw 阅读(224) 评论(0) 推荐(0)
摘要:[BeiJing2011]元素 "题目传送门" 解题思路 把矿石按照魔法值从大到小排序,然后按照顺序构造线性基,如果可以构造就把答案加上去,不能就不加,最后得出的就是真确答案。因为是从大到小构造的,所以不可能把已经构造好的减掉,损失一定更大。 代码如下 cpp include define INF 阅读全文
posted @ 2019-07-26 21:11 whisperlzw 阅读(126) 评论(0) 推荐(1)
摘要:Crazy Binary String "题目传送门" 解题思路 把1记为1,把0记为 1,然后求前缀和,前缀和相等的就说明中间的01数一样。只要记录前缀和数值出现的位置即可更新出答案。 代码如下 cpp include define INF 0x3f3f3f3f using namespace s 阅读全文
posted @ 2019-07-26 20:53 whisperlzw 阅读(208) 评论(0) 推荐(1)
摘要:Magic Line "题目传送门" 解题思路 因为坐标的范围只有正负1000,且所有点坐标都是整数,所以所有点相连构成的最大斜率只有2000,而我们能够输出的的坐标范围是正负10^9。所以我们先把这n个点按照x轴从小到大,x相同的再按照y轴从大到小排序,然后取第n/2个点,在这个点上做一条斜率极大 阅读全文
posted @ 2019-07-26 20:13 whisperlzw 阅读(130) 评论(0) 推荐(0)
摘要:Eddy Walker "题目传送门" 解题思路 因为走过所有的点就会停下来,又因为是从0出发的,所以当n 1时,在0停下来的概率为0,其他的为1/(n 1); 代码如下 cpp include define INF 0x3f3f3f3f using namespace std; typedef l 阅读全文
posted @ 2019-07-26 19:43 whisperlzw 阅读(150) 评论(0) 推荐(0)
摘要:LRU management "题目传送门" 解题思路 用map索引对应地址,用双向链表维护序列。 代码如下 阅读全文
posted @ 2019-07-26 12:02 whisperlzw 阅读(257) 评论(0) 推荐(0)
摘要:Planting Trees "题目传送门" 解题思路 枚举每一个下边界,再枚举其对应的所有上边界,求出其对应区间内的最大最小值,当下边界一样的时候,其最大最小值可以随着上边界减小逐步更新。然后将这些最大最小值分别放入单调队列,初始时设左边界为1,右边界即为当前放入的下标, 高即为此时枚举的高。当当 阅读全文
posted @ 2019-07-26 09:26 whisperlzw 阅读(222) 评论(0) 推荐(0)
摘要:Operation "题目传送门" 解题思路 把右边的数尽量往高位放,构造线性基的时候同时记录其在原序列中的位置,在可以插入的时候如果那个位置上存在的数字的位置比新放入的要小,就把旧的往后挤。用这种发现构造前缀线性基,求最大前缀和的时候只有忽略位置比l小的即可。 代码如下 阅读全文
posted @ 2019-07-25 11:50 whisperlzw 阅读(245) 评论(0) 推荐(0)
摘要:Keen On Everything But Triangle "题目传送门" 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大……直到找到连续的三个数可以构成一个三角形。因为对于一组数,如果不能构成三角形,就小的就是斐波那契数列,因为数的范围在10^9内,所以不会超过50个 阅读全文
posted @ 2019-07-24 21:33 whisperlzw 阅读(547) 评论(1) 推荐(0)
摘要:P3812 【模板】线性基 "题目传送门" 构造过程 用b\[]来存线性基,将各个元素转化为二进制来看,b\[i]里存的是最高位的1在i位的数,如果b\[i]里已经存了数了,则将这个数与b\[i]异或把异或后的值按照这种方法继续往下存入,直到全部存完。 因为线性基是由原集合构造的,显然原集合里的数可 阅读全文
posted @ 2019-07-23 21:45 whisperlzw 阅读(272) 评论(0) 推荐(0)
摘要:Kth Minimum Clique "题目传送门" 解题思路 我们可以从没有点开始,把点一个一个放进去,先把放入一个点的情况都存进按照权值排序的优先队列,每次在新出队的集合里增加一个新的点,为了避免重复,一个集合中的放入次序是按编号递增的,新放进去的点必须和已经在集合中的所有点之间都有一条边。当然 阅读全文
posted @ 2019-07-23 17:24 whisperlzw 阅读(231) 评论(0) 推荐(1)
摘要:Second Large Rectangle "题目传送门" 解题思路 先求出每个点上的高,再利用单调栈分别求出每个点左右两边第一个高小于自己的位置,从而而得出最后一个大于等于自己的位置,进而求出自己的位置的高为高,这个点所在的边为底的最大矩形。这些求出的矩形中的最大值即为可求出的最大矩形。而次大值 阅读全文
posted @ 2019-07-23 11:42 whisperlzw 阅读(163) 评论(0) 推荐(0)
摘要:Vacation "题目传送门" update(O(n)) 看了那个O(n)的方法,感觉自己想的那个O(nlogn)的好傻,awsl。 0车最终通过停车线的时候,状态一定是某个车堵住后面的所有车(这个车也可以是0车)。所以我们要找的就是那个把后面所有都堵住的最前面的车x,x车没有被别的车堵住,从头到 阅读全文
posted @ 2019-07-23 11:11 whisperlzw 阅读(391) 评论(0) 推荐(0)
摘要:Partition problem "题目传送门" 解题思路 假设当前两队的对抗值为s,如果把红队中的一个人a分配到白队,s+= a对红队中所有人的对抗值,s = a对白队中所有人的对抗值。所以我们可以先假设所有人都在红队中,把人一个一个分配到白队中,枚举所有的情况求最大值。 然后继续剪枝: 1.我 阅读全文
posted @ 2019-07-22 11:35 whisperlzw 阅读(177) 评论(0) 推荐(0)
摘要:ABBA "题目传送门" 解题思路 用dp\[i]\[j]来表示前i+j个字符中,有i个A和j个B的合法情况个数。我们可以让前n个A作为AB的A,因为如果我们用后面的A作为AB的A,我们一定也可以让前面的A对应那个B,同理,我们可以让前m个B作为BA的B。 接下来讨论转移方程。当in时,此时若放入A 阅读全文
posted @ 2019-07-19 17:21 whisperlzw 阅读(175) 评论(0) 推荐(0)
摘要:Sequence "题目传送门" 解题思路 可以比较容易的推出矩阵方程,但是由于p/i向下取整的值在变,所以要根据p/i的变化将矩阵分段快速幂。p/i一共有sqrt(p)种结果,所以最多可以分为sqrt(p)段进行快速幂。 代码如下 cpp include define INF 0x3f3f3f3f 阅读全文
posted @ 2019-07-19 10:49 whisperlzw 阅读(138) 评论(0) 推荐(0)
摘要:Swordsman "题目传送门" 解题思路 先将每种属性排序,因为打倒怪兽会使属性增强,所以肯定是能打就打,用cnt\[i]记录怪兽i已经被超过的属性数量,如果被超过的属性数为k了,则打倒此怪兽,将获得的属性加成加上,然后继续推进,直到当前所有属性不能再超过新的怪兽属性了。 由于数据量很大,要快读 阅读全文
posted @ 2019-07-19 10:39 whisperlzw 阅读(141) 评论(0) 推荐(0)
摘要:p1m2 "题目传送门" 解题思路 因为x都是非负数,且每一次操作其实就是把总和减少了1,所以可以得出最后都可以到达稳定。最后稳定的数的下界是0,最大也不会超过其初始数的最大值,所以可以用二分答案来求解。每次二分,我们统计要到达出来的二分值,每个数进行上升操作的次数总和以及下降次数的总和。如果上升次 阅读全文
posted @ 2019-07-19 10:25 whisperlzw 阅读(127) 评论(0) 推荐(0)
摘要:Taotao Picks Apples "题目传送门" 解题思路 建立一颗线段树,维护当前区间内的最大值maxx和可摘取的苹果数num。最大值很容易维护,主要是可摘取的苹果数怎么合并。合并左右孩子时,左孩子里可摘取苹果必然还是可以摘取,所以我们讨论右孩子。 如果右孩子的最大值小于左孩子,根据题目条件 阅读全文
posted @ 2019-07-19 10:01 whisperlzw 阅读(167) 评论(0) 推荐(0)
摘要:Equivalent Prefixes "传送门" 解题思路 先用单调栈求出两个序列中每一个数左边第一个小于自己的数的下标, 存入a[], b[]。然后按照1~n的顺序循环,比较 a\[i]和b\[i]是否相等,如果不相等则退出循环,此时最后一个相等的就是答案。 假设前1 ~ n 1已经满足了条件, 阅读全文
posted @ 2019-07-18 21:53 whisperlzw 阅读(141) 评论(0) 推荐(0)