指针FHQTreap
不太友好的代码
题面依旧是普通平衡树
//Writer : Hsz %WJMZBMR%tourist%hzwer
#include <bits/stdc++.h>
#define LL long long
#define M(a,b) memset(a,b,sizeof a)
using namespace std;
const int inf=0x3fffffff,N=400005;
struct Node{
Node *ch[2];int val,prio,siz;
Node(){}
Node(int w,Node *son){ch[0]=ch[1]=son,val=w,prio=rand(),siz=1;}
void update(){ siz=ch[0]->siz+ch[1]->siz+1;}
}nil,base[N];
typedef Node* node;
node null,len,Root;
void init(){
nil=Node(0,NULL);null=&nil;
null->ch[0]=null->ch[1]=null;
null->siz=0;len=base;Root=null;
}
node newnode(int v){*len=Node(v,null);return len++;}
node merge(node a,node b){
if(a==null) return b;
if(b==null) return a;
if(a->prio>b->prio) {a->ch[1]=merge(a->ch[1],b);a->update();return a;}
b->ch[0]=merge(a,b->ch[0]);b->update();return b;
}
void split(node x,int k,node &l,node &r){
if(x==null) {l=r=null;return ;}
if(x->val<=k){l=x;split(l->ch[1],k,l->ch[1],r);}
else r=x,split(r->ch[0],k,l,r->ch[0]);
x->update();
}
void insert(int k){
node l,r;
split(Root,k,l,r);
Root=merge(merge(l,newnode(k)),r);
}
void del(int k){
node l,mid,r;
split(Root,k-1,l,r);
split(r,k,mid,r);
Root=merge(l,merge(merge(mid->ch[0],mid->ch[1]),r));
}
int get_val(node x,int k){
if(k<=x->ch[0]->siz) return get_val(x->ch[0],k);
else if(k>x->ch[0]->siz+1) return get_val(x->ch[1],k-x->ch[0]->siz-1);
return x->val;
}
int get_rnk(node x,int d){
while(x->ch[d]!=null) x=x->ch[d];
return x->val;
}
inline int read(){
int tot=0,f=1;char ch=getchar();
while (ch<'0'||'9'<ch) {if (ch=='-') f=-f;ch=getchar();}
while ('0'<=ch&&ch<='9') tot=tot*10+ch-48,ch=getchar();
return tot*f;
}
int T,opt,x;
int main() {
srand(568877201);
init();
T=read();
for(int i=1;i<=T;i++){
opt=read();
switch(opt){
case 1:insert(read());break;
case 2:del(read());break;
case 3:x=read();node l,r;split(Root,x-1,l,r);printf("%d\n",l->siz+1);Root=merge(l,r);break;
case 4:printf("%d\n",get_val(Root,read()));break;
case 5:x=read();node l1,r1;split(Root,x-1,l1,r1);printf("%d\n",get_rnk(l1,1));Root=merge(l1,r1);break;
case 6 :x=read();node l2,r2;split(Root,x,l2,r2);printf("%d\n",get_rnk(r2,0));Root=merge(l2,r2);break;
}
}
return 0;
}
指针FHQTreap的更多相关文章
- 可持久化fhq-treap学习笔记
目录 可持久化fhq-treap----- 支持查询历史版本的非旋treap 先看看为啥他可以可持久化 过程 别的 注意&&出错&&吐槽 模板->luoguP38 ...
- bzoj1251: 序列终结者 fhqtreap写法
fhqtreap的速度果然很快 花了时间学了下指针写法 没有旋转 只有分裂以及合并操作 其实还是蛮好写的 #include<cstdio> #include<cstring> ...
- bzoj1503: [NOI2004]郁闷的出纳员 fhqtreap版
这道题写法和之前差不多 但是fhqtreap在加点的时候为了同时维护大根堆以及二叉排序树的性质所以插入时也要注意分裂 fhqteap需要判断指针是否为空 不然就会re 这个我调了很久 #include ...
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Marshal.Copy将指针拷贝给数组
lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...
随机推荐
- js的map文件
什么是source map文件 source map文件是js文件压缩后,文件的变量名替换对应.变量所在位置等元信息数据文件,一般这种文件和min.js主文件放在同一个目录下. 比如压缩后原变量是ma ...
- Eclipse没有Run On Server的问题解决
1.[项目]->[右击]->[Properties]->[Project Facets]->[Modify Project],选择[Java]和[Dynamic Web Mod ...
- POJ 2914
无向图全局最小割算法 求 G=(V, E)中任意 s-t 最小割的算法: 定义w(A, x) = ∑w(v[i], x),v[i] A ∈ 定义 Ax 为在x 前加入 A 的所有点的集合(不包括 ...
- 【solr基础教程之中的一个】Solr相关知识点串讲
Solr是Apache Lucene的一个子项目.Lucene为全文搜索功能提供了完备的API.但它仅仅作为一个API库存在.而不能直接用于搜索. 因此,Solr基于Lucene构建了一 ...
- Ajax的两种实现方式
//ajax的jquery实现 function aclick(){//alert("測试一");var name = $("#userName").val() ...
- 设计一部iphone手机用面向对象的方法
main.m //编辑字体大小command + < //编译执行快捷键 com + R #import <Foundation/Foundation.h> #import &quo ...
- URL重写及ASP.NET路由、Http处理模块、程序等
这段时间在学习ASP.NET路由.HTTP处理等内容,了解了一些,但又未完全弄懂,似是而非,不管如何,作一总结,供日后借鉴和修改. 一.IIS6和IIS7经典模式和集成模式 在IIS6及IIS7经典模 ...
- 第17章 Redis概述
17.2.1 在Windows下安装Redis https://github.com/ServiceStack/redis-windows/tree/master/downloads redis-se ...
- [牛客网练习赛 45 F] Magic Slab 解题报告 (最大权闭合子图)
interlinkage: https://ac.nowcoder.com/acm/contest/847/F description: solution: 最大权闭合子图; 每个单元格看成一个正权点 ...
- mysql.connector 事务总结
mysql.connector事务总结: connection.autocommit = 0 (默认值) 事务处理 使用 connection.commit()方法 #!/usr/bin/env py ...