1.优先队列

(1)大根堆(小顶堆)

priority_queue<int,vector<int>,greater<int> >q;

(2)小根堆(大顶堆)

priority_queue<int, vector<int>, less<int> >q;
//或者
priority_queue<int>q;

用法

q.push(x);//入队列

q.pop();//堆顶值

q.back();//队尾值

q.pop();//出队列

q.empty();//返回q是否为空,空则返回1,否则返回0

q.size();//返回q里元素个数

2.排序

(1)快排(STL万岁!\(QwQ\))

sort(a+1,a+n+1);//a数组1~n从小到大排序

(2)结构体排序

//定义
struct node{
int x,y;
};
node a[maxn];
//先从小到大按x值排序,再从大到小按y值排序
bool cmp(node s1,node s2){
if(s1.x!=s2.x)return s1.x<s2.x;
return s1.y>s2.y;
}
//主函数内
sort(a+1,a+n+1,cmp);

(3)结构体内重载运算符

struct node
{
int x,y;
bool operator < (const node & a) const
{
return x<a.x;
}
};

(4)归并排序

#include<cstdio>
#include<cmath>
#include<set>
#include<stack>
#include<queue>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define _for(i,a,b) for(int i=a;i<=b;i++)
#define maxn 500005
using namespace std;
typedef long long ll;
int t[100005],ans=0;
int n,a[100005]; int read(){
int f=1,ans=0;
char c=getchar();
while(!isdigit(c)){
if(c=='-')f=-1;
c=getchar();
}
while(isdigit(c)){
ans=ans*10+c-'0';
c=getchar();
}
return f*ans;
} void gb(int a[],int l,int r){
if(l==r)
return;
int mid=(l+r)/2;
gb(a,l,mid);
gb(a,mid+1,r);
int i=l,j=mid+1,p=l;
while(i<=mid&&j<=r){
if(a[i]>a[j]){
t[p++]=a[j++];
ans+=mid-i+1; }
else
t[p++]=a[i++];
}
while(i<=mid)
t[p++]=a[i++];
while(j<=r)
t[p++]=a[j++];
for(i=l;i<=r;i++)
a[i]=t[i];
}
int main(){ cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
gb(a,1,n);
cout<<ans<<endl;
return 0;
}

(5)手写快排

int a[101];

void hand_write_quick_sort(int l,int r)
{
if(l>=r) return;
else
{
int i=l;
int j=r;
int top=a[i];
//a[i]即为我们选择的“点”,用于分割
//(我们用的是这个点的值,而不是位置。)
while(i<j)
{
while(top<=a[j] && (i<j)) j--;
//a[j]比top大,则换下一个进行比较
a[i]=a[j];//"点"的位置变为a[j]
while(a[i]<=top && (i<j)) i++;
//a[i]比top小,则换下一个进行比较
a[j]=a[i];//"点"的位置变为a[i]
} //小的往前去,大的往后退。
a[i]=top;
hand_write_quick_sort(l,i-1);
hand_write_quick_sort(i+1,r);
}
} //l~r中第k大的数(分治)
LL get(int l, int r, int k)
{
if (l == r) return a[k];
int u = l + rand() % (r-l+1);
LL v = a[u];
swap(a[l], a[u]); int i = l, j = r;
while (i < j)
{
while (i < j && a[j] >= v) j--;
if (i < j) { a[i] = a[j], i++; }
while (i < j && a[i] < v) i++;
if (i < j) { a[j] = a[i], j--; }
}
a[i] = v; while (i < (l+r)/2 && a[i] == a[i+1]) i++; if (k < i) return get(l, i-1, k);
else if (k > i) return get(i+1, r, k);
else return v;
}

基础算法学习以及$STL$的使用的更多相关文章

  1. 四旋翼基础算法学习2-IMU输入滤波算法

    前言: 处理器读取陀螺仪加速度计数据后首先需要对数据进行滤波处理,此文分析比较几种常用的滤波算法. 参考学习:四轴加速度计滤波 IMU: IMU使用MPU9250(即MPU6500),设置加速度量程± ...

  2. 栈和队列的基础算法学习(EPI)

    今天学习的时间虽然挺多的,但是总觉效率不高.其实今天没有按照计划进行EPI题目的浏览,白天去看了其他的书籍.准备找工作可能需要的状态是一定量经典的书,偶尔温习才可.书是看不完的,知识点也是固定的.所以 ...

  3. 基础算法学习2-dp

    一.算法题: 最大子阵 给定一个n×m 的矩阵 A,求A 中的一个非空子矩阵,使这个子矩阵中的元素和最大.其中,A 的子矩阵指在 A 中行和列均连续的一部分.输入格式输入的第一行包含两个整数 n,m( ...

  4. C++基础算法学习——逆波兰表达式问题

    例题:逆波兰表达式逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 ...

  5. C++基础算法学习——N皇后问题

    n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案. 代码如下: #include <iostream> #include<cmath& ...

  6. C++基础算法学习——汉洛塔问题

    汉诺塔问题古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中, ...

  7. C++基础算法学习——熄灯问题

    有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行– 每个按钮的位置上有一盏灯– 当按下一个按钮后, 该按钮以及周围位置(上边, 下边,左边, 右边)的灯都会改变状态26熄灯问题 POJ1222– ...

  8. C++基础算法学习——猜假币

    有12枚硬币.其中有11枚真币和1枚假币.假币和真币重量不同,但不知道假币比真币轻还是重.现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来).例题 ...

  9. C++基础算法学习——完美立方

    形如a 3 = b 3 + c 3 + d 3 的等式被称为完美立方等式.例如12 3 = 6 3 + 8 3 + 10 3 .编写一个程序,对任给的正整数N(N≤100),寻找所有的四元组(a, b ...

随机推荐

  1. Linux 实现静态路由实验

    环境: 四台主机: A主机:eth0 NAT模式 R1主机:eth0 NAT模式,eth1 仅主机模式 R2主机:eth0 桥接模式,eth1仅主机模式 B主机:eth0 桥接模式 手动修改IP地址 ...

  2. OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)本文转载自:https://harmonyos.51cto.com/posts/10608 夏德旺 软通动力信息技术(集 ...

  3. Spring 源码(8)Spring BeanPostProcessor的注册、国际化及事件发布机制

    上一篇文章https://www.cnblogs.com/redwinter/p/16198942.html介绍了Spring的注解的解析过程以及Spring Boot自动装配的原理,大概回顾下:Sp ...

  4. numpy.core._exceptions.UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype('<U1'), dtype('float64')) -> None

    在机器学习实战的Logistic回归梯度上升优化算法中遇到了这个问题 numpy.core._exceptions.UFuncTypeError: ufunc 'subtract' did not c ...

  5. 现代 CSS 解决方案:CSS 数学函数

    在 CSS 中,其实存在各种各样的函数.具体分为: Transform functions Math functions Filter functions Color functions Image ...

  6. while..else ;for;range; 基本数据类型的内置函数

    while + esle #当while循环正常循环结束后,会执行else中的代码块.如果遇到break结束循环,else中的代码将不会运行. ``` 结构: while 条件: 循环代码 else: ...

  7. 力扣算法:125-验证回文串,131-分割回文串---js

    LC 125-验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 注:回文串是正着读和反着读都一样的字符串. ...

  8. Springboot目录结构分析

    1 src/main/java 存储源码 2 src/main/resource 资源文件夹    (1)src/main/resource/static 用于存放静态资源,如css.js.图片.文件 ...

  9. iOS全埋点解决方案-数据存储

    前言 ​ SDK 需要把事件数据缓冲到本地,待符合一定策略再去同步数据. 一.数据存储策略 ​ 在 iOS 应用程序中,从 "数据缓冲在哪里" 这个纬度看,缓冲一般分两种类型. 内 ...

  10. Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能

    在Kube-OVN社区小伙伴的共同努力下,Kube-OVN v1.10.0于五月份正式发布.Kube-OVN v1.10.0版本中,我们一如既往地对Kube-OVN 的功能.性能.稳定性和易用性进行了 ...