zoukankan      html  css  js  c++  java
  • heap 堆

    实现了交换、向上维护,向下维护的原子功能,其它插入、删除、修改的功能应该不在话下。

    于是有了代码:(luogu3378模板题)

     1 // luogu-judger-enable-o2
     2 #include <cctype>
     3 #include <cstdio>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int maxn=1e6+5, INF=1e9;
     8 int v[maxn], totn;
     9 void ins(int x){  //插入值为x的点
    10     int now; v[now=++totn]=x;
    11     while (now!=1){
    12         if (v[now]<v[now>>1]) swap(v[now], v[now>>1]), now>>=1;
    13         else break;
    14     }
    15 }
    16 void del(int now){  //删除now号点(空间上不释放这个结点,结点个数也不减1,只是把它移到底部)
    17     v[now]=INF; int p=0;
    18     while ((now<<1)<=totn){  //当now还可以往下走时
    19         if (v[now<<1]<v[now<<1|1]||(now<<1|1)>totn) p=0; else p=1;
    20         swap(v[now], v[now<<1|p]); now=now<<1|p;
    21     }
    22 }
    23 
    24 int n, op, t;
    25 
    26 inline void get(int &x){
    27     char c; int flag=1;
    28     for (; !isdigit(c=getchar()); ) if (c=='-') flag=-1;
    29     for (x=c-48; c=getchar(), isdigit(c); )
    30         x=(x<<3)+(x<<1)+c-48;
    31     if (flag==-1) x=-x;
    32 }
    33 
    34 int main(){
    35     get(n);
    36     for (int i=1; i<=n; ++i){
    37         get(op);
    38         if (op==1){ get(t); ins(t); }
    39         if (op==2) printf("%d
    ", v[1]);
    40         if (op==3) del(1);
    41     }
    42     return 0;
    43 }

  • 相关阅读:
    python反射
    numpy笔记
    leetcode43
    leetcode-42
    The Github Flow
    leetcode-37
    leetcode-41
    leetcode-40
    TCP扫盲2
    字节码分析与操作
  • 原文地址:https://www.cnblogs.com/MyNameIsPc/p/7451507.html
Copyright © 2011-2022 走看看