zoukankan      html  css  js  c++  java
  • 手写堆、哈希表

    一、手写堆

    (搭配手写swap)

    系统自带的常数很大。

    小根堆。

    il void swap(int &x,int &y){x^=y^=x^=y;}
    struct Heap{
        int f[N],tot;
        il int size(){return tot;}
        il int top(){return f[1];}
        il void clear(){tot=0;}
        il void push(int x){
            f[++tot]=x;
            for(int i=tot;i;i>>=1){
                if((i>>1)>0&&f[i>>1]>f[i])swap(f[i>>1],f[i]);
                else break;
                /** 判断(i>>1)>=1*/
            }
        }
        il void pop(){
            f[1]=f[tot--];
            for(int i=1,p;i<=tot;){
                p=i<<1;if(p>tot)break;
                /** 判断p<=tot*/
                if((p|1)<=tot&&f[p|1]<f[p])p|=1;
                /** 判断p|1<=tot*/
                if(f[p]<f[i])swap(f[p],f[i]),i=p;
                else break;
            }
        }
    }
    View Code

    2、哈希表

    const int mod=7e5+1,N=1e5+5;
    int head[mod],fir[N],to[N],cnt;
    il int up(int x){
        return x<0?x+mod:x;//防止负数
    }
    il int ins(int x){
        rg int t=up(x%mod);
        for(int i=head[t];i;i=fir[i]){
            if(to[i]==x)return i;//i是离散化后的值(离散不按照大小,只是新建对应值)
        }
        to[++cnt]=x;fir[cnt]=head[t];
        return head[t]=cnt;
    }
    View Code

     模数:(质数)

    1373137

    2379239

    Informatik verbindet dich und mich. 信息将你我连结。
  • 相关阅读:
    java9
    java8
    java7
    JavaScript将字符串拆分为数组
    JavaScript return false
    Java中前台往后台传多个id参数
    Easyui清除tree的选中
    jquery easyui tree的全选与反选
    android源码开发基础知识了解
    Android activity的生命周期
  • 原文地址:https://www.cnblogs.com/seamtn/p/11366396.html
Copyright © 2011-2022 走看看