1.快速排序模板

#include <bits/stdc++.h>using namespace std;const int N = 1000010;int q[N];void quick_sort(int q[], int l, int r)
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[(l+r)/2];while (i < j){do i ++ ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j);quick_sort(q, j + 1, r);
}int main()
{int n,k;scanf("%d%d", &n,&k);for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);quick_sort(q, 0, n - 1);printf("%d\n", q[k-1]);return 0;
}

2.归并排序模板

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int N=1e6+9;
int n;
int a[N],tmp[N];
void mergesort(int q[],int l,int r)
{if(l>=r) return ;int mid=l+r>>1;mergesort(q,l,mid);mergesort(q,mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r)if(q[i]<=q[j]) tmp[k++]=q[i++];else tmp[k++]=q[j++];while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);mergesort(a,0,n-1);for(int i=0;i<n;i++) cout<<a[i]<<" ";return 0;
}

3.归并排序模板【逆序数对】

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+9;
int n;
int a[N],tmp[N];
ll mergesort(int q[],int l,int r)
{if(l>=r) return 0;int mid=l+r>>1;ll res=mergesort(q,l,mid)+mergesort(q,mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r)if(q[i]<=q[j]) tmp[k++]=q[i++];else {tmp[k++]=q[j++];res+=mid-i+1;}while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];return res;
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);printf("%lld\n",mergesort(a,0,n-1));return 0;
}

4.整数二分【Mid分别在两个区间的不同模板】

用来查找某个整数是否在序列中存在,时间复杂度O(n2n^2n2logn)

#include <bits/stdc++.h>using namespace std;
const int N=1000010;
int n,t,k;
int q[N];
int main()
{scanf("%d%d",&n,&t);for(int i=0;i<n;i++)scanf("%d",&q[i]);while(t--){scanf("%d",&k);int l=0,r=n-1;while(l<r){int mid=l+r>>1;if(q[mid]>=k) r=mid;else l=mid+1;}if(q[l]!=k) printf("-1 -1\n");//q[l]=q[r]else{cout<<l<<" ";int l=0,r=n-1;while(l<r){int mid=l+r+1>>1;if(q[mid]<=k) l=mid;else r=mid-1;}cout<<l<<endl;}}return 0;
}

分巧克力

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int N=100010;
int n,k;
int h[N],w[N];int check(int mid)
{ll res=0;for(int i=0;i<n;i++)res+=h[i]/mid*(w[i]/mid);if(res>=k) return true;return false;
}
int main()
{cin>>n>>k;for(int i=0;i<n;i++) scanf("%d%d",&h[i],&w[i]);int l=1,r=1e5;while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}printf("%d\n",r);return 0;
}

机器人跳跃问题

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>using namespace std;
const int N=100010;
int n,h[N];
bool check(int e)
{for(int i=1;i<=n;i++){e=2*e-h[i];if(e>=1e5) return true;if(e<0) return false;}return true;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&h[i]);int l=0,r=1e5;while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}printf("%d\n",r);return 0;
}

1221.四平方和
纯暴力枚举三次的O(n3n^3n3)代码会被卡掉,哈希算法在本题中是最坏情况,算法本身O(N2N^2N2),因此也会超时

#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;
const int N = 2500010;
struct Sum
{int s, c, d;bool operator< (const Sum &t)const{if (s != t.s) return s < t.s;if (c != t.c) return c < t.c;return d < t.d;}
}sum[N];
int n, m;
int main()
{cin >> n;for (int c = 0; c * c <= n; c ++ )for (int d = c; c * c + d * d <= n; d ++ )sum[m ++ ] = {c * c + d * d, c, d};sort(sum, sum + m);for (int a = 0; a * a <= n; a ++ )for (int b = 0; a * a + b * b <= n; b ++ ){int t = n - a * a - b * b;int l = 0, r = m - 1;while (l < r){int mid = l + r >> 1;if (sum[mid].s >= t) r = mid;else l = mid + 1;}if (sum[l].s == t){printf("%d %d %d %d\n", a, b, sum[l].c, sum[l].d);return 0;}}return 0;
}

5.浮点数二分

#include <bits/stdc++.h>using namespace std;int main()
{double n;scanf("%lf",&n);double l=-10000,r=10000;while(r-l>1e-8){double mid=(l+r)/2;if(pow(mid,3)>=n) r=mid;else l=mid;}printf("%lf\n",l);return 0;
}

割绳子:绳子的根数一定定义成整数!

#include <bits/stdc++.h>using namespace std;
const int N=100010;
double a[N];
int n,m;
bool check(double mid)
{int res=0;for(int i=0;i<n;i++)res+=a[i]/mid;if(res>=m) return true;return false;
}
int main()
{cin>>n>>m;for(int i=0;i<n;i++) scanf("%lf",&a[i]);double l=0,r=1e9;while(r-l>=1e-3){double mid=(l+r)/2;if(check(mid)) l=mid;else r=mid;}printf("%.2f\n",r);return 0;
}

模板题——快排、归并、二分相关推荐

  1. python算法题排序_python-数据结构与算法- 面试常考排序算法题-快排-冒泡-堆排-二分-选择等...

    算法可视化网站推荐---->visualgo 0.面试题中的排序算法 一些排序算法可能在工作中用的会比较少,但是面试却是不得不面对的问题.算法有助于提高我们对数据结构的理解以及提高自己的逻辑能力 ...

  2. 【数据结构算法】快排/归并/堆排序 c++

    一个用来了解数据结构算法(各种排序,列表,树等)很友好的网站: https://visualgo.net/en 该题目来自于牛客:算法篇-排序问题 快排(必备)+归并(体会分治)+堆(自己建堆) // ...

  3. 2018年蓝桥杯B组题E题+快排

    题目: E 快速排序:以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. #include &l ...

  4. CSU - 2078 查找第k大(O(n)区间第k大 快排思想)

    题目 T组数据,每次给出n(n<=1e7)个正整数, 输出从大到小第k大的数,时限1s,空间131072KB 题解 现在想想找第k大就是快排划个轴递归嘛,像线段树上二分一样 nth_elemen ...

  5. 排序(一)归并、快排、优先队列等(图文具体解释)

    排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次.在剩下的元素中找到最小的元素.将它与数组的第二个元素交换位置. 如此往复,直到将 ...

  6. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  7. 排序算法 | 快排、冒泡、堆排、归并、基数、递归、希尔、计数

    文章目录 写在前面 排序 1. 基数排序`稳定` 2. 归并排序`稳定`merge sort 3. 快速排序`不稳定`quick sort 4. 堆排序`不稳定`heap sort 大根堆 小根堆 5 ...

  8. ssl1125-集合【哈希表二分查找+快排】

    前言 今天学哈希表,然后就第一节晚修赶快写完作业就上了做题了,然后就做完了这道题get√. 正题 题目 给出两个集合: A是B的一个真子集,输出"A is a proper subset o ...

  9. 常见经典排序算法学习总结(插入、shell、冒泡、选择、归并、快排等)

    博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了 ...

  10. 力扣刷题记录---快排算法

    AcWing 785. 快速排序 对快排算法思想就不描述了,针对快排递归过程中边界的取值做了总结: x为每次递归中,选取的基准数(枢轴) 如果x = q[i]或者x = q[l + r >> ...

最新文章

  1. 【VS实践】代码调试与错误处理
  2. matlab 向量去除空格,MATLAB向量
  3. 尝试create tech team
  4. 用户态与内核态的区别
  5. 在游戏运营行业,Serverless 如何解决数据采集分析痛点?
  6. javaScript 验证码代码
  7. 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege
  8. 一次thinkphp框架 success跳转卡顿问题的解决
  9. idea 查看实现类快捷键及类里面的方法对应的快捷键、跳到下一行
  10. 常用排序算法(六)——希尔排序
  11. 五款优秀免费的在线抠图工具
  12. 美文听力:别错过机会
  13. Word中如何删除某一页的页眉,不影响其他页眉
  14. Global Sensing and Measurements Reuse for Image Compressed Sensing
  15. Linux系统安装使用glassfish3.1.2.2
  16. Two-Stream Convolutional Networksfor Action Recognition in Videos——学习笔记
  17. 下载想看的英文kindle 电子书
  18. 马王堆汉墓帛书‧老子甲本——德经
  19. 北京中医药 计算机基础,北京中医药大学远程教育学院计算机基础2008辅导资料.doc...
  20. 《人人都能玩赚ChatGPT》:一份简明易懂的 ChatGPT 技术指南

热门文章

  1. python 整合同类数据求分位值_【利用python进行数据分析】数据聚合与分组运算...
  2. HTML5 WebSocket
  3. mysql 并发 加锁_MySQL的并发控制与加锁分析
  4. linux 源代码安装mysql5.5_linux下通过源码包安装MySql5.5
  5. Vue:解决安装Vue Devtools报错Error: Cannot find module@vue-devtools/build-tools解决办法
  6. Python:程序生成Windows可执行文件/不显示命令执行窗口/无法生成exe报错TypeError: an integer is required (got type bytes)解决方法
  7. Java集合框架源码解读(4)——WeakHashMap
  8. js 设置body背景图片
  9. SQLServer中的系统表,存储过程和函数的功能及应用
  10. 自动驾驶_基于强化学习的自动驾驶系统