题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3224

bzoj不能用time(0),看到这个博客才知道,我也RE了好几发……

#include<bits/stdc++.h>
using namespace std; struct Node
{
int val,pri,sz,cnt;
Node* ch[];
int cmp(int x) const
{
if (x==val) return -;
return x<val?:;
}
void push_up()
{
sz=cnt+ch[]->sz+ch[]->sz;
}
}*tree,*null; void rotate(Node* &node,int d)
{
Node *k=node->ch[d];
node->ch[d]=k->ch[d^];
k->ch[d^]=node;
node=k;
} void insert(Node* &node,int x)
{
if (node==null)
{
node=new Node();
node->ch[]=null;
node->ch[]=null;
node->val=x;
node->cnt=;
node->pri=rand();
node->sz=;
}
else
{
int d=node->cmp(x);
if (d==-)
{
node->cnt++;
node->sz++;
}
else
{
insert(node->ch[d],x);
if (node->pri < node->ch[d]->pri)
{
rotate(node,d);
node->ch[d^]->push_up();
}
node->push_up();
}
}
} void remove(Node* &node,int x)
{
if (node==null) return;
int d=node->cmp(x);
if (d==-)
{
if (node->cnt>)
{
node->cnt--;
node->sz--;
}
else
{
if (node->ch[]==null)
{
Node *tmp=node;
node=node->ch[];
delete tmp;
}
else if (node->ch[]==null)
{
Node *tmp=node;
node=node->ch[];
delete tmp;
}
else
{
int dd=(node->ch[]->pri)<(node->ch[]->pri)?:;
rotate(node,dd);
remove(node->ch[dd^],x);
}
}
}
else remove(node->ch[d],x);
node->push_up();
} int rk(const Node* node,int x)
{
if (node==null) return ;
if (node->val<x) return node->cnt+node->ch[]->sz+rk(node->ch[],x);
else return rk(node->ch[],x);
} int kth(const Node* node,int k)
{
if (node->ch[]==null)
{
if (node->cnt>=k) return node->val;
else return kth(node->ch[],k-node->cnt);
}
else
{
if (node->ch[]->sz>=k) return kth(node->ch[],k);
if (node->ch[]->sz+node->cnt>=k) return node->val;
return kth(node->ch[],k-node->ch[]->sz-node->cnt);
}
} int pre(Node* node,int x)
{
Node *t=node;
int res=-0x3f3f3f3f;
while (t!=null)
{
if (t->val>=x) t=t->ch[];
else res=t->val,t=t->ch[];
}
return res;
} int suc(Node* node,int x)
{
Node *t=node;
int res=0x3f3f3f3f;
while (t!=null)
{
if (t->val<=x) t=t->ch[];
else res=t->val,t=t->ch[];
}
return res;
} int main()
{
//srand((unsigned)time(NULL));
null=new Node();
null->cnt=;
null->sz=;
null->pri=-;
null->ch[]=null;
null->ch[]=null;
tree=null;
int n;
scanf("%d",&n);
while (n--)
{
int op,x;
scanf("%d%d",&op,&x);
switch(op)
{
case : insert(tree,x); break;
case : remove(tree,x); break;
case : printf("%d\n",rk(tree,x)+); break;
case : printf("%d\n",kth(tree,x)); break;
case : printf("%d\n",pre(tree,x)); break;
case : printf("%d\n",suc(tree,x)); break;
}
}
return ;
}

[bzoj 3224]手写treap的更多相关文章

  1. BZOJ 3224 - 普通平衡树 - [Treap][Splay]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3224 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中 ...

  2. BZOJ - 3224 可持久化Treap 树形操作

    这个题目去年就做过了,这次稍微改了一下 都是基础操作 #include<iostream> #include<algorithm> #include<cstdio> ...

  3. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...

  4. BZOJ 3224 普通平衡树(Treap模板题)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 14301  Solved: 6208 [Submit][ ...

  5. 使用AI算法进行手写数字识别

    人工智能   人工智能(Artificial Intelligence,简称AI)一词最初是在1956年Dartmouth学会上提出的,从那以后,研究者们发展了众多理论和原理,人工智能的概念也随之扩展 ...

  6. 【Win 10 应用开发】手写识别

    记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...

  7. JS / Egret 单笔手写识别、手势识别

    UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...

  8. 如何用卷积神经网络CNN识别手写数字集?

    前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...

  9. 【转】机器学习教程 十四-利用tensorflow做手写数字识别

    模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...

随机推荐

  1. python学习之路2(程序的控制结构)

    1.程序的分支结构 1.1 单分支 if <条件>:                       例:guess = eval(input()) <语句块>          ...

  2. html 弹框 优化 alert

    <!DOCTYPE html> <html> <head> <title>cs</title> </head> <styl ...

  3. 转:python教程专题资源免费下载整理合集收藏

    python教程专题资源免费下载整理合集收藏 < Python学习手册(第4版)>(Learning Python, 4th Edition)[PDF] 94MB 简体中文 <Pyt ...

  4. Javaweb——四则运算---18.11.01

    ---恢复内容开始--- test.jsp <%@ page language="java" contentType="text/html; charset=utf ...

  5. 关于实现mybatis order by 排序传递参数实现 问题记录

    一    问题场景:本人项目纯纯的后端系统  并且项目前端采用纯纯的原生js 实现 1)表格  通过查询列表数据放入到域中  前段采用 for循环的方式实现遍历生成列表 2)分页实现本人是公司内部自定 ...

  6. SXOI2018游记

    day0 动身去太原.太原五中虽然挺小的但是很好看啊qwq(进门口一个"通天堂"(逃 试机.似乎看到了__stdcall!!然而没敢去认orz.linux选手似乎是9个.准考证(一 ...

  7. jar命令:打包、查看、更新等

    如何把写好的Java程序打包为jar文件呢?下面说的就是java使用命令行打包JAR的方法 1.命令行的方式:打包jar cf JAR文件名称 程序文件名称或者程序所在的文件夹举例:jar cf My ...

  8. Scala function programming

    1. Arbitrary multi parameters funcs sum(1,2,3,4,5) = sum(1 to 5: _*)the equal '=' can be ignored if ...

  9. spring location设置本地路径

    <context:property-placeholder location="file:D:/jdbc.properties"/> 直接在路径前加上 file:

  10. 接口测试工具postman(四)导入导出文件

    1.导入json文件 2.单个文件夹导出,文件格式是 json文件 3.所有数据导出,文件格式是 json文件