首页 > 其他分享 >STL 总结

STL 总结

时间:2024-09-08 20:04:24浏览次数:3  
标签:总结 q1 q2 STL top int push size

STL使用总结

快排

sort(a+1,a+n+1,less())从小到大 可以省略第三个
sort(a+1,a+n+1,greater())从大到小

堆(queue)

1

分为大根堆priority_queue <int,vector<int>,less<int> > q;(第三个可以省略)
以及小根堆priority_queue <int,vector<int>,greater<int> > q;(第三个不可省略)

2

可以通过对顶堆来实现动态中位数,实现如下

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std; 
template<typename T>inline void re(T &x)
{
	int f=1;x=0;char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48); 
}
template<typename T>inline void wr(T x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)wr(x/10);
	putchar(x%10^48); 
}
priority_queue <int,vector<int> > q1;
priority_queue <int,vector<int>,greater<int> > q2;
int n;
inline void insert(int x)
{
	if(q2.empty())q2.push(x);
	else if(x>=q2.top())q2.push(x);
	else q1.push(x);
	if(q1.size()&&q2.size())while(q1.top()>q2.top())q2.push(q1.top()),q1.pop();
	while(q1.size()>q2.size())q2.push(q1.top()),q1.pop();
	while(q2.size()-q1.size()>=2)q1.push(q2.top()),q2.pop();
}
signed main()
{
	re(n);
	for(int i=1;i<=n;i++)
	{
		int x;
		re(x);
		insert(x);
		if(i%2)wr(q2.top()),putchar('\n');
	}
	return 0;
}
这里将中位数放在了小跟堆的堆顶来维护,当然也可以放在大根堆的堆顶

set(multiset)

特点

set不可重(可用来去重) multiset可重 但都具有有序性

成员函数

\(begin()\) :第一个元素的位置
\(end()\) : 最后一个元素的位置 \(+1\)
\(insert()\) : 插入
\(erase()\) : 删除 ,注意传参既可以是值也可以是迭代器
\(find()\) :查找某个元素的位置,无则返回 \(end()\)
\(lower\)_\(bound()\) :第一个 \(\geq\) 某个值的元素所在位置
\(empty()\) \(size()\) :不多赘述
\(prev(iterator)\):返回某个迭代器的上一个迭代器

遍历

for(set<int>iterator it=s.begin();it!=s.end();it++)
for(auto it=s.begin();it!=s.end();it++)
for(auto i:s) 这个是直接访问每一个元素,字符串中同样可以使用

结构体

用结构体重载运算符时要加一个 friend 声明
[NOIP2012 提高组] 开车旅行:

点击查看代码
struct Drive
{
	int num,h;
	friend bool operator<(Drive a,Drive b){return a.h<b.h;}
};

标签:总结,q1,q2,STL,top,int,push,size
From: https://www.cnblogs.com/Hanggoash/p/18367391

相关文章

  • vue3知识总结
    Vue3是Vue.js的最新版本,相较于Vue2,它在性能、API设计、类型支持等多个方面都有显著的改进和创新。以下是对Vue3知识的总结:一、性能优化响应式系统升级:Vue3使用Proxy替代了Vue2中的Object.defineProperty,实现了对对象变化的更广泛监测,包括对象的添加和删除,......
  • 周总结
    python线程与进程简介 进程与线程的历史我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。程序是运行在系统上的具有某种功能的软件,比如说浏......
  • 【赛后总结】トヨタ自動車プログラミングコンテスト2024#9(待补完)
    AtCoderBeginnerContest370赛后总结成绩速览:展开目录目录AtCoderBeginnerContest370赛后总结ARaiseBothHands-100ptsBBinaryAlchemy-200ptsCWordLadder-300ptsARaiseBothHands-100pts展开翻译高桥君决定制作章鱼烧,并给苏介君吃。他告诉苏介君,如果想......
  • C++STL之stack和queue容器适配器:基本使用及模拟实现
    目录stack的介绍和使用stack的介绍stack的使用queue的介绍和使用queue的介绍queue的使用priority_queue的介绍和使用priority_queue的介绍priority_queue的使用deque双端队列(容器)deque的介绍及使用deque的缺点deque的原理(了解)容器适配器概念stack和queue的......
  • NOIP2024模拟赛5 总结
    NOIP2024模拟赛5总结T1天才俱乐部特判了\(sum-s<0\),但没有考虑\(sum-s=0\)。挂为0pts。T2实战教学由于写的不够优,贪心+二分的思路TLE了。由于不明原因,输出\(\max(a_i+b_i)\)能过。非常神奇。T3穿越银匙之门T4绳网委托一句话总结:挂分挂成sb了。......
  • Vue.js入门系列(二十三):集成第三方动画库、总结过渡与动画、配置代理
    个人名片......
  • 第二周周日9.8学习总结
    vj2https://vjudge.net/contest/651666#overviewhttps://www.cnblogs.com/Hamine/p/16661610.htmlC-ExpressMailTaking#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;typedeflonglongll;constintmaxn=200......
  • Netty权威指南:Netty总结-Java I/O
    第一章JavaI/O1.1I/O基础入门Java1.4之前的版本,开发高性能I/O程序的时候,有问题:没有数据缓冲区,I/O性能有问题没有Channel概念,只有输入输出流只有BIO,通常会导致通信线程被长时间阻塞支持字符集有限,硬件移植性不好1.1.1Linux网络I/O模型Linux的内核将所有的外部设备都......
  • 【C++】简述STL——string类的使用
    文章目录一、STL的简述1.STL的框架2.STL版本二、string1、string的介绍2、为什么string类要实现为模板?三、string的构造接口四、string的容量相关的接口五、string对象修改相关的接口1、insert2.earse3、assign4、replace六、string对象字符串运算相关接口1、c_str2、......
  • C++ STL-deque容器入门详解
    1.1deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:deque内部......