摘要: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main () { 4 double n; 5 cin >> n; 6 double l = -100, r = 100; 7 while (r - l > 1e-8) { //当区间足够 阅读全文
posted @ 2020-06-27 19:56 kyk333 阅读(282) 评论(0) 推荐(0)
摘要: 二分的本质并不是单调性。 有单调性一定可以二分,但是可以二分的题目不一定有单调性。 我们找一个性质:使得整个区间可以被划分为两个左右区间,一边满足这个性质,一边不满足这个性质,中间没有交点。二分就可以寻找这个性质的边界。 上红下绿。 每次二分时都选择答案所在的区间进行操作,每一次都保证区间里一定有答 阅读全文
posted @ 2020-06-27 19:36 kyk333 阅读(311) 评论(0) 推荐(0)
摘要: 注意数据范围,n=100000,从大到小时,逆序对数量最多。 约为5 * 10 ^ 9。超过了int的最大范围,所以需要用long long来存。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 100010; 4 阅读全文
posted @ 2020-06-27 17:43 kyk333 阅读(238) 评论(0) 推荐(0)
摘要: 基本思想:分治。 归并排序是以数组的中间点来分。 时间复杂度确定是nlogn 1:确定分界点mid = (l + r) / 2,是下标的中间值。 2:递归排序左右两边。排完序后,左右两边都是有序的了。 3:归并。把两个有序的数组,归并成一个有序的数组。 1 #include <bits/stdc++ 阅读全文
posted @ 2020-06-27 14:22 kyk333 阅读(154) 评论(0) 推荐(0)
摘要: 保证第k小的数永远在区间里面。 注意:本题是允许有重复数字的。 比如,1 1 2 2 3 3这六个数中,第2小的是1,第5小的是3。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 100010; 4 int a[N 阅读全文
posted @ 2020-06-27 13:19 kyk333 阅读(368) 评论(0) 推荐(0)
摘要: 快速排序的基本思想是分治。 快速排序的步骤: 假设区间是从l到r的话 1:确定分界点x。在要排序的数组内找到一个数作为分界点x。(q[l], q[(l + r) / 2], q[r], 随机值) 2:划分区间。使得左区间里的数都小于等于x,右区间里的数都大于等于x。快速排序是选择一个数来划分区间。 阅读全文
posted @ 2020-06-27 12:18 kyk333 阅读(188) 评论(0) 推荐(0)