摘要: 逆序数 转载这位大佬的解释 算法讲解 既然我们已经归并排序怎么归的了,那我们就要知道他怎么求逆序数了。 首先我们要知道归并是利用了什么求出来的逆序数:在二路归并的时候,如果序列后面的数跑到前面来了,中间路过了多少个数,他前面就有多少个数比他- 大。 这不就正好是,计算前面有多少个数比他大的过程吗嘿嘿 阅读全文
posted @ 2020-06-22 17:24 chstor 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 分治 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分 阅读全文
posted @ 2020-06-22 17:17 chstor 阅读(180) 评论(0) 推荐(1) 编辑
摘要: [HNOI2003]激光炸弹 二维前缀和问题 每一个点用格子代替 求(0,0)到(i,j)之间的前缀和 :f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1]; 计算每一个格子的价值:ans=max(ans,f[i][j]-f[i-R][j]-f[i][j-R]+f[i- 阅读全文
posted @ 2020-06-22 11:38 chstor 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 拼数 把整数转换为字符串 自定义排序函数:如果a+b>b+a,则把a排在前面,否则将b排在前面(对于字符串a、b,a+b表示连接两个字符串形成一个新串) #include<bits/stdc++.h> using namespace std; #define maxn 1010 #define in 阅读全文
posted @ 2020-06-22 09:29 chstor 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 明明的随机数 桶排序,把在区间输入的数都标记为1 适用于这种数据范围不是很大的 #include<bits/stdc++.h> using namespace std; #define maxn 1010 #define inf 0x3f3f3f3f #define mm(a,x) memset(a 阅读全文
posted @ 2020-06-22 09:27 chstor 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 校门外的树 模拟写法 把在区间的所有都标记一下,没标记的计数 这个题数据范围不是很大,可以这样 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+2; int cnt[maxn]; int main(){ int l,m; 阅读全文
posted @ 2020-06-22 09:25 chstor 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 纪念品分组 贪心策略:最大的先和小的组合 先从小到大排列,然后从左右两边开始找符合条件的两件纪念品,如果不符合,就让右边的单独放一组 #include<bits/stdc++.h> #define maxn 30005 using namespace std; int a[maxn]; int ma 阅读全文
posted @ 2020-06-22 09:03 chstor 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 铺地毯 覆盖地面某个点的最上面的那张地毯的编号 从后往前枚举,前提是这个点在地毯上面 #include<bits/stdc++.h> #define maxn 100005 using namespace std; struct Node{ int x,y,up,right; }a[maxn]; i 阅读全文
posted @ 2020-06-22 08:53 chstor 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 数学考试 区间求和问题可以想到一个常用算法:前缀和。区间的和可以用方便地求出。 维护第一个长度为k的最大值,枚举第二个长度为k的起点,答案就是max(ans,当前长度为k的序列和+第一个长度为k的序列和) #include<bits/stdc++.h> using namespace std; #d 阅读全文
posted @ 2020-06-22 08:50 chstor 阅读(148) 评论(0) 推荐(0) 编辑