题目链接: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数据类型及其特有方法

    一.运算符 in方法 "hello" in "abcdefghijklmnopqrstuvwxyz" "li" in ["gg&q ...

  2. 640. Solve the Equation

    class Solution { public: string solveEquation(string equation) { int idx = equation.find('='); , v1 ...

  3. HDU1301 Jungle Roads(Kruskal)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  4. vue 项目如何使用微信分享接口

    首先做微信网页都要接入微信sdk: 安装sdk npm install weixin-js-sdk --save 具体可以查看微信公众平台技术文档:https://mp.weixin.qq.com/w ...

  5. PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析

    RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...

  6. LeetCode:16. 3Sum Closest(Medium)

    1. 原题链接 https://leetcode.com/problems/3sum-closest/description/ 2. 题目要求 数组S = nums[n]包含n个整数,找出S中三个整数 ...

  7. Migrating from MapReduce 1 (MRv1) to MapReduce 2 (MRv2, YARN)...

    This is a guide to migrating from Apache MapReduce 1 (MRv1) to the Next Generation MapReduce (MRv2 o ...

  8. 【紫书】(UVa1347)Tour

    继续考虑dp题目. 题意分析 其实这里只是更加仔细的做一个lrj的复读机(Orz 他分析了一个很重要的结果:如果是一个人从左到右再回来,并且每个点恰经过一次,那么等价于两个人从左到右每个点经过一次地遍 ...

  9. 企业级Nginx Web服务优化实战

    web优化一览总结表 优化类型 优化说明 优化方法 安全优化 隐藏nginx版本信息优化 修改nginx配置文件实现优化 server_tokens off: 修改nginx版本信息优化 修改ngin ...

  10. Pro Git - 笔记1

    Getting Started About Version Control Local Version Control Systems Centralized Version Control Syst ...