首页 > 其他分享 >P3378 【模板】堆

P3378 【模板】堆

时间:2022-12-13 11:25:38浏览次数:68  
标签:kdl int tr len break P3378 模板

P3378 【模板】堆

题目简述

给定三个操作,求数列中最小的数,删除数列中最小的数,插入一个新的数


思路

板子题没什么好说,用 stl 自带的优先队列很好写,但手写的也要掌握。
建议参考这篇博客


代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+6;
int tr[N];
int main(){
  int n,len=0;
  cin>>n;
  while(n--){
    int op;
    cin>>op;
    switch(op){
      case 1:{
        int x;
        cin>>x;
        tr[++len]=x;
        int kdl=len;
        while(kdl){
          if(tr[kdl>>1]>tr[kdl])tr[kdl>>1]^=tr[kdl]^=tr[kdl>>1]^=tr[kdl];
          else break;
          kdl>>=1;
        }
        break;
      }
      case 2:{
        cout<<tr[1]<<endl;
        break;
      }
      case 3:{
        int kdl=1;
        tr[len]^=tr[1]^=tr[len]^=tr[1];
        tr[len]=0;
        len--;
        while(kdl<len){
          int ls=(kdl<<1),rs=(kdl<<1|1);
          if(ls>len){
            break;
          }
          if(rs>len){
            if(tr[ls]<tr[kdl])tr[kdl]^=tr[ls]^=tr[kdl]^=tr[ls];
            break;
          }
          if(tr[ls]<tr[rs]){
            if(tr[ls]<tr[kdl])tr[kdl]^=tr[ls]^=tr[kdl]^=tr[ls],kdl=ls;
            else break;
          }
          else {
            if(tr[rs]<tr[kdl])tr[kdl]^=tr[rs]^=tr[kdl]^=tr[rs],kdl=rs;
            else break;
          }
        }
        break;
      }
    }
  }
  return 0;
}

PS:有时候真的很奇怪我是怎么能把代码都写这么冗长的/kk

标签:kdl,int,tr,len,break,P3378,模板
From: https://www.cnblogs.com/fleabag/p/16978062.html

相关文章

  • P3865 【模板】ST 表
    P3865【模板】ST表题目简述对于给定的数列,要求以\(\theta(1)\)的时间复杂度计算出\([l_i,r_i]\)中最大值思路没什么可讲的,但要注意,计算区间长度的对数要是log2(r-l......
  • P5905 【模板】Johnson 全源最短路
    P5905【模板】Johnson全源最短路...处理负权边的方法十分巧妙,就像是势能一样算法上文链接有详解,就不赘述了,这样就实现了dij也可以处理负边是需要提前预处理一遍,建立......
  • 数据模板 DataTemplate
    <Grid><ListBoxx:Name="list"><ListBox.ItemTemplate><DataTemplate><StackPanelOrientation="Horizont......
  • cmakelist 基础模板
    一个最基础的cmake模板#cmakeneedsthislinecmake_minimum_required(VERSION3.1)#Defineprojectnameproject(opencv_example_project)find_package(OpenCV......
  • Unity 自定义创建脚本模板
    Unity自定义创建脚本模板原理:以模板代码为底板,通过关键字替换来实现代码创建两种实现方案方案11.先准备好对应的代码模板,放到Assets\ScriptTemplates目录下usingSys......
  • 我的机器学习和深度学习绘图模板.pptx
    推荐一个绘图模板,非常适合深度学习的绘图,可以看下效果:大家可以自定义自己需要的图形,上面已经提供了基本的元素,根据自己的需求去调整使用即可!这个项目地址为:https://github.c......
  • 使用Markdown在写博客的一些模板
    模板一(笔记类模板)写在前面用​​Markdown​​​写博客一年多了,最开始是用富文本写,后来发现​​Markdown​​​更适合我,而且​提供了导入导出的功能,图片可以云存储,所以导出......
  • 博奥智源科技,实验室官方网站功能模板分享
    首页需进行版式设计,满足业务部门建设使用需求。不限于:图片比例支持1920*900;需支持不固定条数滚动;需支持搜索功能,以及导航目录的修改和页面设计;需支持全站、全时间段......
  • 模板方法模式
    1.概述定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2.模式中的角色2.1抽象类(Ab......
  • Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查
    写在前面分享一些AWX启用facts缓存和模板问卷调查的笔记博文内容涉及:启动facts缓存相关配置Demo启用模板调查来设置变量demo食用方式:需要了解Ansible理解不足小伙伴......