首页 > 其他分享 >ext 库在 OI 中的应用

ext 库在 OI 中的应用

时间:2024-04-14 22:44:46浏览次数:27  
标签:OI pb ext 保证 应用 失效 ds 指针

ext 库在 OI 中的应用

写一个帖子,防止以后忘了。

pb_ds 部分

pb_ds 万能头

#include<bits/extc++.h>

来包含 ext 库中所有的头文件(例如 pb_ds 和 rope)。

但是这句话在非 Ubuntu 环境下可能会显示缺失 iconv.h。 这个在 OI 是可以使用的,因为评测机的 NOI-linux2.0 是 Ubuntu 环境,但如果你考试不开虚拟机是不可以在 Windows 下运行的。

优先队列

由于常数的优劣性,本文只介绍 pairing_heap_tag 配对堆。

然而定义却比较复杂。

示例定义:

#include<bits/stdc++.h>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;

__gnu_pbds::priority_queue<int,greater<int>> a,c;//定义类型
__gnu_pbds::priority_queue<int> d;//默认大根堆

__gnu_pbds::priority_queue<int>::point_iterator it;//定义指针

struct node
{
    int x,y;
    bool friend operator <(const node a,const node b)
    {
        return a.x+a.y<b.x+b.y;
    }
};
__gnu_pbds::priority_queue<node> b;

int main()
{
    a.push(1),a.push(2),a.push(3);
    cout<<a.top()<<"\n";//输出 1

    c.join(a);
    cout<<a.size()<<"\n";//输出 0
    cout<<c.size()<<"\n";//输出 3
    cout<<c.top()<<"\n";//输出 1

    c.pop();
    cout<<c.top()<<"\n";//输出 2

    d.push(1),it=d.push(2),d.push(3);
    cout<<d.top()<<"\n";//输出 3

    d.modify(it,10);
    cout<<d.top()<<"\n";//输出 10

    b.push({1,1}),b.push({2,2}),b.push({3,3});
    cout<<b.top().x<<"\n";//输出 3
}

可以完全替代普通左偏树。

平衡树

失效保证(invalidation_guarantee)

pb_ds 提供了三种失效保证(不是所有的容器的有三种),分别是:

basic_invalidation_guarantee - 基本失效保证,最弱的无效保证。可以保证在容器没有修改时候迭代器,指针等保持有效。

Ps:没有修改的情况下,指针所指的元素还是原来的元素。

point_invalidation_guarantee - 点失效保证,更强的无效保证。可以保证在修改容器但迭代器等所指的东西没有被删除是保持有效。

Ps:修改后,如果修改的不是指针所指的元素,那么指针所指的元素还是原来的元素。

range_invalidation_guarantee - 范围失效保证,最强的无效保证。在 点失效保证 的基础上,保证相对位置不变。

Ps:修改后,如果修改的不是指针所指的元素,那么指针所指的元素还是原来的元素;同时,保证指针的相对位置不变。

pairing_heap_tag 均为点失效保证。

rb_tree_tag 为范围失效保证。

其他

ROPE

参考文献

堆 - OI Wiki

平衡树 - OI Wiki

浅谈 pb_ds 库及其在 OI/其他算竞中的应用

鸽一下……

标签:OI,pb,ext,保证,应用,失效,ds,指针
From: https://www.cnblogs.com/binbinbjl/p/18134856

相关文章

  • 读《软件工程技术与应用》
    读《软件工程技术与应用》的几个问题。如何成为一个好的程序员?提出问题的原因:1.软件开发是一个高需求、高薪水的行业,成为一名优秀的程序员可以提高职业发展的机会和薪资水平。2.程序员可以在不同的行业、公司和项目中工作,有很大的灵活性和自由度来选择自己感兴趣的领域和......
  • 深入理解DES算法:原理、实现与应用
    title:深入理解DES算法:原理、实现与应用date:2024/4/1421:30:21updated:2024/4/1421:30:21tags:DES加密对称加密分组密码密钥管理S盒P盒安全性分析替代算法DES算法简介历史DES(DataEncryptionStandard)算法是由IBM研发,并于1977年被美国国家标准局(NBS,现NIST......
  • 实验2 C语言分支与循环基础应用编程
    任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%65+1;//生成一个1-65之间的随机数printf("20238331%04d\n&q......
  • 实验2 C语言分支与循环基础应用编程
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%65+1;printf("20238331%04d\n",number);}syste......
  • Android 11--设置第三方Launcher并默认 与 如何预置apk
    1.0Ver/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java+privatevoidsetDefaultLauncher(){+try{+finalPackageManagerpm=getPackageManager();++//StringdefPackageName="com.android......
  • 实验2C语言分支与循环基础应用编程
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%65+1;printf("20238331%04d\n"......
  • ABP -Vnext框架一步一步入门落地教程——ABP Vnext框架代码安装和启动(一)
    兄弟们,人生需要指引,而复制最快的方式,让我们行动吧——codesoft教程介绍ABP-Vnext框架我们之前摸了无数次,好象初恋的女孩,一直在靠近,一直在努力,一直不敢盯着她的眼睛说:美女,我很喜欢你,能不能一起吃个饭!我们都喜欢自己变得足够的优秀之后,才敢说这句话。结果三年就过去了。我想搞技......
  • [POI2012] Rendezvous 题解
    众所周知,\(lyh\)是一名压行大师,也是一名\(juruo\),所以他将他繁琐的方法用\(102\)行表现了出来……明显原题为基环内向树森林。首先用并查集计算连通块,不在一个连通块里的答案就是\(-1\-1\)。发现实际上答案就是以环为根节点,求\(lca\)的结果,求完后可以分为两种情况:根......
  • TextIn合合信息的API使用心得
    在大学生服务外包杯的比赛中,我们组选了A29的赛题,是合合信息公司发布的赛题该赛题的意图是让我们使用它们公司开发的大模型api接口解决现实中的问题,在textin中的api接口中主要包含了以下几个方面的产品1.通用文字识别2.图像处理3.车辆相关识别4.国内票据识别等等我们组开发应用......
  • 【编程】C++ 常用容器以及一些应用案例
    介绍一些我常用的C++容器和使用方法,以及使用案例。blog1概述容器(Container)是一个存储其他对象集合的持有者对象。容器以类模板实现,对支持的元素类型有很大的灵活性。容器管理元素的存储并提供多个成员函数来访问和操作元素。两个主要类别:序列容器(Sequencecontainer):将元素维......