这回要求的是第k的元素,

参考了ljl大神的模板,orz

 //insert 插入
//remove 删除
//_find 查找
//kth 返回root为根的树中第k小的元素
//treap插入、删除、查询时间复杂度均为O(logn)
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cstdio>
using namespace std;
int a[],n,m;
struct Node
{
Node *ch[];
int r,v,s;
Node(int v):v(v)
{s=;ch[]=ch[]=NULL;r=rand();}
int cmp(int x) const{
if(x==v)return(-);
return (x<v)?():();
}
void maintain(){
s=;
if(ch[]!=NULL)s+=ch[]->s;
if(ch[]!=NULL)s+=ch[]->s;
}
};
void rotate(Node* &o,int d)
{
Node* k=o->ch[d^];
o->ch[d^]=k->ch[d];
k->ch[d]=o;
o->maintain();
k->maintain();
o=k;
}
void insert(Node* &o,int x)
{
if(o==NULL) o=new Node(x);
else {
int d=(x<o->v)?:;
insert(o->ch[d],x);
if((o->r)<(o->ch[d]->r))
rotate(o,d^);
}
o->maintain();
}
void remove(Node* &o,int x)
{
int d=o->cmp(x);
if(d==-){
Node* u=o;
if(o->ch[]==NULL){o=o->ch[];delete u;}else
if(o->ch[]==NULL){o=o->ch[];delete u;}else {
int c=(o->ch[])>(o->ch[])?():();
rotate(o,c);
remove(o->ch[c],x);
}
}
else remove(o->ch[d],x);
if(o!=NULL) o->maintain();
}
int find(Node* &o,int x)
{
while(o!=NULL){
int d=o->cmp(x);
if(d==-)
return ;
else
o=o->ch[d];
}
return ;
}
int kth(Node* o,int k)
{
while(o!=NULL){
int lchsize=(o->ch[]!=NULL)?
(o->ch[]->s):;
if(lchsize+==k)
return o->v;
else {
int d=(lchsize<k);
o=o->ch[d];
k-=d*(lchsize+);
}
}
return ;
} int main()
{
Node* root=NULL;
int u,ans,p=;
srand(time()); cin>>m>>n;
for(int i=;i<m;i++)
cin>>a[i];
for(int i=;i<=n;i++)
{
cin>>u;
while(p<u)
insert(root,a[p++]);
ans=kth(root,i);
cout<<ans<<endl;
}
return ;
}

poj 1442 名次树的更多相关文章

  1. POJ 2985 名次树

    题意:1~n个猫,有合并操作,有询问操作,合并两只猫所在的集合,询问第K大的集合. 分析:合并操作用并查集,用size维护,询问操作用Treap.注意优化,不能刚开始就把所有size = 1放到名次树 ...

  2. poj 1442 Black Box(优先队列&Treap)

    题目链接:http://poj.org/problem?id=1442 思路分析: <1>维护一个最小堆与最大堆,最大堆中存储最小的K个数,其余存储在最小堆中; <2>使用Tr ...

  3. Treap和名次树

    Treap名字的来源:Tree+Heap,正如名字一样,就是一颗简单的BST,一坨堆的合体.BST的不平衡的根本原因在于基于左<=根<=右的模式吃单调序列时候会无脑成长链,而Treap则添 ...

  4. UVa 1479 (Treap 名次树) Graph and Queries

    这题写起来真累.. 名次树就是多了一个附加信息记录以该节点为根的树的总结点的个数,由于BST的性质再根据这个附加信息,我们可以很容易找到这棵树中第k大的值是多少. 所以在这道题中用一棵名次树来维护一个 ...

  5. uvalive 5031 Graph and Queries 名次树+Treap

    题意:给你个点m条边的无向图,每个节点都有一个整数权值.你的任务是执行一系列操作.操作分为3种... 思路:本题一点要逆向来做,正向每次如果删边,复杂度太高.逆向到一定顺序的时候添加一条边更容易.详见 ...

  6. bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1807  Solved: 772[Submit][Stat ...

  7. bzoj3224 Tyvj 1728 普通平衡树(名次树+处理相同)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5354  Solved: 2196[Submit][Sta ...

  8. UVaLive5031 Graph and Queries(时光倒流+名次树)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20332 [思路] 时光倒流+名次树(rank tree). 所谓“ ...

  9. bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Statu ...

随机推荐

  1. android应用中去掉标题栏的方法

    现在我坚定的认为写技术博客对自己有很大的帮助,写博客给自己一个学而思的机会. 在Android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFea ...

  2. angularjs: ng-select和ng-options

    angular.js有一个很强大的指令: ng-select 它可以帮助你通过数据模型来创建select元素.它很好的支持了select标签的语法,但是却有点坑. 假设有如下一段json数据: { & ...

  3. Masonry

    Autolayout就像一个知情达理,善解人意的好姑娘,可惜长相有点不堪入目,所以追求者寥寥无几.所幸遇到了化妆大师cloudkite,给她来了一个完美的化妆,从此丑小鸭Autolayout变成了美天 ...

  4. 005医疗项目-模块一:用户的查找:1.用户表查询的sql语句

    这是医疗项目的第一个模块:做一个用户的查询,可以根据用户的账号,用户的名称,单位的名称,用户的类型去查询.要求效果如下:

  5. 通过jekyll建立静态网页

    部署一个网站需要三个步骤:(1) generating the site, (2) deploying it to the public Internet, and (3) assigning it ...

  6. C语言 共用体

    //共用体 union #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #includ ...

  7. C语言 生成随机数

    #include<stdio.h> #include<time.h> #include<Windows.h> void main1(){ //定义一个时间类型 ti ...

  8. fanghuangscannerV3 字典生成器

    #-*-coding=GB2312-*- import random import sys def makedict(name): f1 =open(name+'_user.txt','r') f2 ...

  9. struct2cell

    函数功能:把结构体转换为元胞数组. 语法格式: c = struct2cell(s) 如果s是m*n(m行n列)的二维的结构体数组,每个结构体含有p个域,则转换得到一个p*m*n的元胞数组c. 如果s ...

  10. 信息安全系统设计基础实验一 20135210&20135218

    北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                     ...