从零开始的异世界生活

#include<bits/stdc++.h>
using namespace std;
const int N=100000;
const int inf=2147483647;

int cnt=0;
int top=0;

struct treap{
  int ch[2],size,rd,val;
}t[N+10];

int gi(){
  int ans=0,f=1;char i=getchar();
  while(i<‘0‘||i>‘9‘){if(i==‘-‘)f=-1;i=getchar();}
  while(i>=‘0‘&&i<=‘9‘){ans=ans*10+i-‘0‘;i=getchar();}
  return ans*f;
}

void up(int i){
  t[i].size=t[t[i].ch[0]].size+t[t[i].ch[1]].size+1;
}

int rotate(int i,int dir){
  int child=t[i].ch[dir];
  t[i].ch[dir]=t[child].ch[dir^1];
  t[child].ch[dir^1]=i;
  up(i);up(child);
  return child;
}

int insert(int i,int val){
  if(!i){
    t[++cnt].rd=rand();
    t[cnt].val=val;
    t[cnt].size=1;
    return cnt;
  }
  t[i].size++;
  bool dir=t[i].val<=val;
  t[i].ch[dir]=insert(t[i].ch[dir],val);
  if(t[i].rd>t[t[i].ch[dir]].rd)
  return rotate(i,dir);
  return i;
}

int pre_rank(int i,int val){
  if(!i)return -1;
  if(val==t[i].val)
  {
    int ans=pre_rank(t[i].ch[0],val);
    return ans==-1?i:ans;
  }
  if(t[i].val>val) return pre_rank(t[i].ch[0],val);
  return pre_rank(t[i].ch[1],val);
}

int get_rank(int i,int j,int val){
  if(i==j)return t[t[i].ch[0]].size+1;
  if(t[i].val>=val) return get_rank(t[i].ch[0],j,val);
  return get_rank(t[i].ch[1],j,val)+t[t[i].ch[0]].size+1;
}

int kth(int i,int k){
  if(t[t[i].ch[0]].size==k-1) return t[i].val;
  if(t[t[i].ch[0]].size>=k) return kth(t[i].ch[0],k);
  return kth(t[i].ch[1],k-t[t[i].ch[0]].size-1);
}

int delet(int i,int val){
  if(t[i].val==val)
  {
    if(t[i].ch[0]&&t[i].ch[1])
    {
      int son=t[i].ch[0],fa;
      while(t[son].ch[1])
      fa=son,son=t[son].ch[1],t[fa].size--;
      if(son==t[i].ch[0])
      {
    t[son].ch[1]=t[i].ch[1];
    t[son].rd=t[i].rd;
    t[son].size=t[i].size-1;
    return son;
      }
      t[fa].ch[1]=t[son].ch[0];
      t[son].ch[0]=t[i].ch[0];
      t[son].ch[1]=t[i].ch[1];
      t[son].rd=t[i].rd;
      t[son].size=t[i].size-1;
      return son;
    }
    if(t[i].ch[0]) return t[i].ch[0];
    return t[i].ch[1];
  }
  int dir=t[i].val<val;
  t[i].ch[dir]=delet(t[i].ch[dir],val);
  t[i].size--;
  return i;
}

int get_pre(int i,int val){
  if(!i) return -inf;
  if(t[i].val<val) return max(t[i].val,get_pre(t[i].ch[1],val));
  return get_pre(t[i].ch[0],val);
}

int get_next(int i,int val){
  if(!i) return inf;
  if(t[i].val>val) return min(t[i].val,get_next(t[i].ch[0],val));
  return get_next(t[i].ch[1],val);
}

int main(){
  srand(time(NULL));
  int opt = gi() , flag , x ;
  for(int i=1;i<=opt;i++){
    flag=gi(); x=gi();
    switch(flag){
    case 1:top=insert(top,x);break;
    case 2:top=delet(top,x);break;
    case 3:printf("%d\n",get_rank(top,pre_rank(top,x),x));break;
    case 4:printf("%d\n",kth(top,x));break;
    case 5:printf("%d\n",get_pre(top,x));break;
    case 6:printf("%d\n",get_next(top,x));break;
    }
  }
  return 0;
}

原文地址:https://www.cnblogs.com/Lumberjack/p/8284345.html

时间: 2024-11-08 15:13:10

从零开始的异世界生活的相关文章

从零开始的异世界生活(前缀和)

Description 486 作为有史以来最悲惨的男主,我们知道他需要经历一些无限次的死亡和轮回才能进行下一个关卡. 现在给你 n 个连续的时间点,每个时间点 i 上都会有一个心理伤害值 hurt[i],然后告诉你 m 个死亡时间点 deth[i],以及当前死亡时间点会死亡的次数 num[i],和死亡后 486 会返回的时间点(也就是最近的存档点 return[i]). 其整个过程就是 486 从时间点 0 开始 (hurt[0] = 0),不断向下一个时间点 1, 2, 3… 前进,当遇到死

#从零开始的maven异世界#

从零开始的maven异世界 1:什么是maven,maven可以做什么? 首先,Maven的正确发音是[?mev?n],而不是"马瘟"以及其他什么瘟.Maven在美国是一个口语化的词语,代表专家.内行的意思,约等于北京话中的老炮儿.一个对Maven比较正式的定义是这么说的:Maven是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependenc

NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(小女警的异世界之战-前序中序求后序)

A - 小女警的异世界之战 Time Limit: 1000 ms        Memory Limit: 65536 KB Submit Description 这一天,小女警花花,泡泡和毛毛来到终极Boss"Him"所在的异世界并准备与其决一死战,却被困在了他的城堡里.她们发现异世界是一个巨大的城堡.城堡由一个个大小不同的房间组成,房间有着以下的规则: 每个房间有且仅有一扇黄门,此外至多有一扇红门和一扇绿门:黄色代表通向更大的房间,绿色和红色代表通向更小的房间.很显然,如果你打开

从零开始的网站架设生活[2]

从零开始的网站架设[2] 哇,今天就从一个模板开始说起吧.上次脑抽下了一个模板,模板大概可以总结成几个部分: (模板在这里:需要学习的可以下载哦~下载后24小时删除哦~) https://github.com/RockDeria/300shop.git css文件夹中的都是样式文件,fonts应该是字体资源文件,images是图片资源文件,js是脚本文件夹,index.html是我们的主静态界面.(可以看做网页的入口)外部的style.css 定义了绝大部分的自定义样式. 1.在html静态页面

从零开始在JAVA世界冒险——(零)

主要是这学期有J2EE课,所以就来学JAVA了,顺便开了JAVA的学期帖,之后还有HTML和JS以及CSS(不说了学习去了 首先这里推荐一个我个人觉得比较好的B站从零开始JAVA教程:av48144058(不过他有700多P,可以挑自己不懂的地方学习 之后这里推荐写JAVA的软件使用过程:记事本 → Notepad++/Edit Plus → Eclipse → IDEA (有些人对推荐记事本不是很理解,但是我认为学习一门新的语言的时候从最基层做起是最为重要的,因为不同语言的习惯是不一样的,只有

从零开始的程序员生活

每段时间都要重新清零,将所学的知识从头在学一遍. 摘录: "有实际开发工作经验"是指你目前已经具备下列能力: 1)你已经认为C++和汇编语言都是很简单的语言,并能够自如地运用: 2)你能够在30分钟之内想到正确的五子棋AI算法设计思路和方向: 3)你完全理解STL为什么这么重要: 4)你能够独立地解决所有的编译与链接问题,哪怕你从来没有遇到的问题,你也不需要询问任何人: 5)英文网站是你的首要信息来源: 6)能够读懂英语写成的国际标准,比如NTFS磁盘格式标准. 7)你经常站在集合论的

SD从零开始64-特异的业务交易(Special Business Transactions)

紧迫订单Rush Orders 紧迫订单和现金销售是用在从工厂销售流程可能用于当客户需要求即刻从货场获得他们的货物时的销售凭据种类: 在即刻交货的销售凭据种类中,即刻交货符号和交货种类DF是设置的:当你保留一张紧迫订单,系统积极创立一个交货种类DF的交货: 一旦货物曾经从货场取出,捡配和记账发货就能够开始: 当你创立Billing凭据(例如在凑近处理中)时,系统打印发票并将它们发送给客户: 现金销售Cash Sales 在现金销售的销售凭据种类中,即刻交货符号和交货种类BV是搭配的:当你保留现金

从零开始的&quot;E&quot;世界(J2SE)

汾煞3瘴7i乒9HXN侄http://www.zcool.com.cn/collection/ZMTg2OTM5ODg=.html V3j97BRH39http://www.zcool.com.cn/collection/ZMTg2OTQwMTY=.html 7揪寐斗抡5翘M汤貉40http://www.zcool.com.cn/collection/ZMTg2OTQxMjg=.html I0淖ll导K潜酉赖0http://www.zcool.com.cn/collection/ZMTg2OTQ

玲珑oj 1117 线段树+离线+离散化,laz大法

1117 - RE:从零开始的异世界生活 Time Limit:1s Memory Limit:256MByte Submissions:438Solved:68 DESCRIPTION 486到了异世界,看到了一群可爱的妹子比如蕾姆啊,艾米莉亚啊,拉姆啊,白鲸啊,怠惰啊等等!有一天膜女告诉486说她的能力可能不能再用了,因为膜女在思考一个数据结构题,没心情管486了.486说我来帮你做,膜女说你很棒棒哦! 给一个集合,最开始为空(不是数学上的集合)五个操作: 1.插入x2.把小于x的数变成x3