摘要:
首先我们可以推出朴素的dp转移方程 dp[i]=min(dp[j])+max(a[j+1]...a[i]) 但是这个转移方程显然是超时的,所以我们需要对转移方程进行优化 做这种题目的时候,我们需要对方程进行观察,我们发现,我们需要保存两种值,一个是前面已经算过的dp方程,这个很简单 另一个是一段满足 阅读全文
摘要:
因为上方和右上方都要打掉才能打这个位置,所以从第一行往下枚举不能获得正确答案,因此考虑倒序枚举,从最后一列按行枚举 具体注释看代码 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<vec 阅读全文
摘要:
根据对题目的观察,我们可以发现本题其实可以抽象成正序对和逆序对的个数的题目 这就能让我们联想到使用树状数组来解决问题 另外本题需要离散化,因为数据过大。 我们可以先求取所有情况,减去不合法的情况,也就是所谓的容斥原理,那么那些是不满足的呢? 我们从题目看出他要是四元组,而我们用乘法原理求出的情况,包 阅读全文
摘要:
区间k小数是主席树的模板题目,如果区间不包含,用莫队+权值线段树也能解 主席树是可持久化线段树,所为可持久化,就是每次只新增不一样的节点,而保留前面的版本,这样可以做到查询。 如果询问时1-r,那么直接主席树,询问的是l-r,就用到前缀和思想,具体看代码注释 #include<iostream> # 阅读全文
摘要:
A题 我们注意到如果存在两个奇数,那么就能满足题目条件,所以我们就从头寻找两个奇数,没有的话就是无解 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<vector> #include<s 阅读全文
摘要:
本题是可持久化0-1 trie树的题目 做这题我相信都已经学会可持久化trie树的基本方法,所以本文不过多解释原理 在下面代码中有很多注释,介绍了写法。 可持久化trie树的重点就是他只在原有基础上新增了添加的内容,而保留前面的,所以用到了很多复制的操作 01trie树当中,假如该位置为1,那么我们 阅读全文
摘要:
A题 本题根据题意模拟能解,不排除更好的做法 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<vector> #include<cstring> using namespace std; 阅读全文
摘要:
本题可以使用权值线段树+离散化+二分解答 首先观察题目,题目要求i-j区间之内的第k大的树 所以我们可以用权值线段树,但是权值线段树只能在查找全局最大值,本题要求i-j区间的最大值 所以我们考虑使用莫队算法,因为这道题我们看出可以离线查询,对每个询问进行查询记录 另外这题数据大,所以使用离散化,具体 阅读全文
摘要:
A题 肯定是1越多越好,因为位数越大越大,所以当n是2的倍数的时候,全是1 但是n可能不是n的倍数,此时应该有(n-3)/2个1和1个7,并且7在前面 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #i 阅读全文
摘要:
莫队算法,进行组合数转换,就能发现贡献度只要维护平方和就行 网上有很多好题解,我只是记录一下我的代码 注意本题两个int数相乘会爆int,所以要养成开long long的好习惯,不然螺旋升天 #include<iostream> #include<algorithm> #include<cstdio 阅读全文