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. CSS预编译器

    零.CSS预编译器 CSS预处理器是指对生成CSS前的某一语法的处理.CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,供项目使用 CSS预处理器为CSS增加一 ...

  2. Linux-文件查找-打包压缩-tar

    1.文件查找工具locate,find 1.1  locate locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 索引的构建是在系统较为空闲时自动进 ...

  3. Linux系统常用命令速查手册

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 系统信息 arch      #显示机器的处理器架构(1 ...

  4. 老生常谈系列之Aop--Spring Aop源码解析(二)

    老生常谈系列之Aop--Spring Aop源码解析(二) 前言 上一篇文章老生常谈系列之Aop--Spring Aop源码解析(一)已经介绍完Spring Aop获取advice切面增强方法的逻辑, ...

  5. JWT 访问令牌

    JWT 访问令牌 更为详细的介绍jwt 在学习jwt之前我们首先了解一下用户身份验证 1 单一服务器认证模式 一般过程如下: 用户向服务器发送用户名和密码. 验证服务器后,相关数据(如用户名,用户角色 ...

  6. nginx反向代理获取用户真实ip

    nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...

  7. linux篇-linux iptables配置

    1 iptables默认系统自带 setup 2重启防火墙 /etc/init.d/iptables restart 3接受端口 Vi /etc/sysconfig/iptables -A INPUT ...

  8. Unity实现”对象池管理器“

    前言:警告!这可能是坨屎,空闲时间写成,仅作娱乐 在Unity中生成或销毁一个物体会占用较大的资源,如果是制作FPS射击游戏,子弹生成更是雪上加霜.所以我自己写了一个PoolManager,不能和网上 ...

  9. jeecgboot-vue3笔记(八)——treeSelect树形选择组件的使用(一次性加载)

    使用效果 前端代码 定义interface export interface TreeDataItem { value: string; key: string; title?: string; sl ...

  10. python爬虫之JS逆向

    Python爬虫之JS逆向案例 由于在爬取数据时,遇到请求头限制属性为动态生成,现将解决方式整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs调用js文件(可见 ...