zoukankan      html  css  js  c++  java
  • POJ 1442 Treap模板

    // by SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int cnt=0,jy,a[30500],n,m,root=-1;
    struct node{
        int left,right,count_left,count_right,key,priority;
    }treap[30500];
    void zig(int &x){
        int y=treap[x].right;
        treap[x].right=treap[y].left;
        treap[x].count_right=treap[y].count_left;
        treap[y].left=x;
        treap[y].count_left=treap[x].count_left+treap[x].count_right+1;
        x=y;
    }
    void zag(int &x){
        int y=treap[x].left;
        treap[x].left=treap[y].right;
        treap[x].count_left=treap[y].count_right;
        treap[y].right=x;
        treap[y].count_right=treap[x].count_left+treap[x].count_right+1;
        x=y;
    }
    void insert(int &x,int new_key){
        if(x==-1){
            x=cnt++;
            treap[x].left=treap[x].right=-1;
            treap[x].priority=rand();
            treap[x].key=new_key;
            treap[x].count_left=treap[x].count_right=0;
        }
        else if(new_key<treap[x].key){
            treap[x].count_left++;
            insert(treap[x].left,new_key);
            if(treap[x].priority>treap[treap[x].left].priority)zag(x);
        }
        else{
            treap[x].count_right++;
            insert(treap[x].right,new_key);
            if(treap[x].priority>treap[treap[x].right].priority)zig(x);
        }
    }
    int query(int &x,int k_th){
        if(treap[x].count_left+1==k_th)return treap[x].key;
        if(treap[x].count_left+1<k_th)return query(treap[x].right,k_th-treap[x].count_left-1);
        return query(treap[x].left,k_th);
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=m;i++){
            scanf("%d",&jy);
            while(cnt<jy)insert(root,a[cnt+1]);
            printf("%d
    ",query(root,i));
        }
    }

    这里写图片描述

  • 相关阅读:
    pip2 pip3
    linux 下加载移动硬盘
    linux 下使用 Synergy
    openSUSE 下安装 OpenCV
    PCA and ZAC Whitening
    openSUSE 安装 Torch
    [转] Python xrange与range的区别
    Linux下安装 mxnet
    Caffe hdf5 layer data 大于2G 的导入
    [CVPR2017] Visual Translation Embedding Network for Visual Relation Detection 论文笔记
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532417.html
Copyright © 2011-2022 走看看