摘要: >传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字,求原序列有多少个子区间包含至少一个该 数字,最后把答案累加起来即可。 问题在于求序列有多少个子区间包含至少一个某 阅读全文
posted @ 2019-08-12 16:32 sparkyen 阅读(192) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意:有n块能量石,每秒钟会增加Li的能量,但是一旦增长到了Ci它就不会增长了,它初始的能量为Ei。 现在有若干个时刻ti,会选择下标在[Si,Ti]的能量石吸取它们的能量,这些能量石的能量变为0,并依据上述规则继续增长。 问最后一共吸取了多少能量?思路:本来我写的时候没考虑到时间复杂度 阅读全文
posted @ 2019-08-12 11:15 sparkyen 阅读(337) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意:给n个操作,每次和 (1e9范围内)即往数组里面插所有 的所有数,求每次操作后的中位数思路:区间离散化然后二分答案,因为小于中位数的数字恰好有个,这显然具有单调性。那么问题就转化为如何求小于等于某个数x的数一共有多少个。 考虑以下两种情况:假设左端点小于等于x的区间一共有q个 如果 阅读全文
posted @ 2019-08-11 18:25 sparkyen 阅读(218) 评论(0) 推荐(0) 编辑
摘要: “离散化,就是把无限空间中有限的个体映射到有限的空间中去,以提高算法的时空效率。” 很多算法的复杂度与数据中的最大值有关,比如树状数组和纯用数组实现的一对一标记。时常会遇到这种情况:数据的范围非常大或者其中含有负数,但数据本身的个数并不是很多(远小于数据范围)。在这种情况下,如果每个数据元素的具体值 阅读全文
posted @ 2019-08-11 18:15 sparkyen 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题意:给出由01组成的矩阵,求求全是1的次大子矩阵。 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 1 1 1 1 1 有篇博主的代码细节处理的很好,由于矩阵每行的长度一致,则不必重复在数组末尾标记 阅读全文
posted @ 2019-08-11 17:47 sparkyen 阅读(146) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数 思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非常相像。 像到什么地步呢!!你想一个不能扩大的矩阵,也即是说不能向左右扩展,也不能向上扩展,那我们就用单调栈维护 阅读全文
posted @ 2019-08-11 17:38 sparkyen 阅读(128) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意: 你有n件行李,有k个箱子体积相同的箱子,遵循下面的规则将行李放进箱子里面 每次都取当前最大的可以放进箱子的行李放进箱子,如果该箱子放不进任何行李那么就换一个新的箱子再按照这一条规则进行放行李 请问箱子最小的体积是多少可以放进所有行李 思路: 还是菜鸡的我比赛的时候没有思路,也木有 阅读全文
posted @ 2019-08-07 11:11 sparkyen 阅读(138) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意: 给你几组样例,给你两个字符a,b,一个长度len,一个长度为len的字符串str,str是字符串s的子串 str是s删掉除过a,b两字符剩下的子串,现在求s,多种情况输出一种。构造不出来输出-1 思路: 想都想不到的拓扑排序。 因为这个str肯定是满足s顺序关系的s的子串,所以依 阅读全文
posted @ 2019-08-06 19:18 sparkyen 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。举个栗子:有人想要制作一件工具,但是这个工具不是一次就可以完成的,分很多个步骤,而且这些步骤是有顺序的,也就是说,假设B的顺序在A的后面,那么你就必须要先完成A再完成B,但是也有些步骤不分顺序,意思是你先做哪一个都是可以的。 面对 阅读全文
posted @ 2019-08-06 18:54 sparkyen 阅读(362) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意:给你两个数字字符串s,t,求字符串s的子序列比字符串t大的个数 思路:他的题解上写的就是dp的基础练习题,好像的确是这么回事,既然是dp,那么对于定义的状态不同得到的转移方程就不同,写法自然就不一样。这里给出其中一种dp的解法 首先从 s 串中选的数字长度大于 t 串长度,肯定ok 阅读全文
posted @ 2019-08-06 10:24 sparkyen 阅读(188) 评论(0) 推荐(1) 编辑
摘要: RMQ(Range Minimum/Maximum Query)区间最值查询,即给出长度为n的数组A,以及m组询问s、t(s<=t<=n),返回区间[s,t]中的最值。 基于线段树的方法实现的话,建树O(n),查询O(logn),相比ST,适合用于n更大,m较小的情况。 void built(int 阅读全文
posted @ 2019-07-31 16:22 sparkyen 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。优先级从高到低,依次为~、&、^、|1. 按位与操作 0&0=0; 0&1=0; 1&0=0; 1&1=1(有0则0) 例子:10&9: 0000 1010 & 0000 1001 = 0000 1000 = 8负数按补码形式 阅读全文
posted @ 2019-07-30 15:44 sparkyen 阅读(2047) 评论(0) 推荐(1) 编辑
摘要: >传送门< 题意:求树的直径 思路:就是道模板题,两遍dfs就求出来了 Code #include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; typedef pai 阅读全文
posted @ 2019-07-30 14:17 sparkyen 阅读(151) 评论(0) 推荐(1) 编辑
摘要: >传送门< 题意:n给城市有n-1条路相连,每两个城市之间的道路花费为1,有k个人在k个城市,问这k个人聚集在同一个城市的最小花费 思路:(官方给的题解写的挺好理解的) 考虑距离最远的两个关键点,设它们的距离为d,d/2上取整即为答案。 必要性:这两个人要碰面,必然要走至少d/2步。 充分性:我们取 阅读全文
posted @ 2019-07-30 13:41 sparkyen 阅读(220) 评论(0) 推荐(0) 编辑
摘要: >传送门< 题意:求最少需要多少个3的倍数按位或后可以得到数字a 思路:利用3的倍数对应的二进制数的性质来先选出一个x,然后根据数字a再配一个y出来 首先,我们都知道十进制中,任意一个数只要每一位相加的和能被3整除,那么这个数就能被3整除。 这是为什么? 因为十进制中每一个位都会10^k次方,那么仅 阅读全文
posted @ 2019-07-29 17:43 sparkyen 阅读(241) 评论(0) 推荐(1) 编辑