摘要: 1.归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略 2.归并排序是稳定排序 3.归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。 例子: 注:逆序对在代码标注中 关于归并排序求逆序对原理,请自行百度 1 #include<iostream> 2 #include<algo 阅读全文
posted @ 2018-02-28 18:10 月亮茶 阅读(4203) 评论(0) 推荐(3) 编辑
摘要: 堆排序: 利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 (不知道堆的,自行百度) 堆排序的基本思路: a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素"沉 阅读全文
posted @ 2018-02-28 17:05 月亮茶 阅读(199) 评论(0) 推荐(0) 编辑
摘要: f[i][j]表示从位置i开始,长度为2^j的一段区间的最值 以最小值为例: 原理:意会 加油! 阅读全文
posted @ 2018-02-28 15:14 月亮茶 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 插入排序基本思想: 每一步将一个待排序的数,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。 例子: 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int a[120000],n; 5 int main( 阅读全文
posted @ 2018-02-28 14:40 月亮茶 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序的基本思想是: 对相邻的元素进行两两比较,顺序相反则进行交换。 这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 #include<cstdio> #include<algorithm> using namespace std; int a[120000],n; int mai 阅读全文
posted @ 2018-02-28 14:32 月亮茶 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 简单选择排序 是最简单直观的一种算法,基本思想: 每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。 简单选择排序是不稳定排序。 在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。 其实我们很容易发现,在还 阅读全文
posted @ 2018-02-28 14:20 月亮茶 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll N=1e5+2; 5 ll n,h[N],tot,S,m; 6 struct node{ 7 ll v,c,ne; 8 }e[N*8] 阅读全文
posted @ 2018-02-26 22:02 月亮茶 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 评测题:洛谷【模板】单源最短路径 不加任何优化: 1 queue<int>q; 2 void spfa(ll s) 3 { 4 for(ll i=1;i<=n;i++) d[i]=(ll)(2147483647); 5 d[s]=0;q.push(s);v[s]=1; 6 while(!q.empt 阅读全文
posted @ 2018-02-26 20:46 月亮茶 阅读(276) 评论(0) 推荐(1) 编辑
摘要: 定义: 所谓闭合子图就是给定一个有向图,从中选择一些点组成一个点集V。对于V中任意一个点,其后续节点都仍然在V中。比如 在这个图中有8个闭合子图:∅,{3},{4},{2,4},{3,4},{1,3,4},{2,3,4},{1,2,3,4} 最大权闭合子图就是所有的闭合子图中权值和最大的一个。 如下 阅读全文
posted @ 2018-02-26 15:01 月亮茶 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人。 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900)。 题目描述 这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需 阅读全文
posted @ 2018-02-25 18:25 月亮茶 阅读(157) 评论(0) 推荐(0) 编辑