【luogu2161】【SHOI2009】Booking会场预约
题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作:
1)插入1个新区间,删除所有时间轴上与它有交的区间并输出个数。
2)查询当前时间轴上的区间个数。
解题思路:裸的无旋treap即可。按照双端点排序,然后找前驱后继,进行操作即可。
AC代码:(目前是洛谷 Rank1 596ms)
#include <stdio.h>
#define r register
#define getchar() (S==TT&&(TT=(S=BB)+fread(BB,1,1<<15,stdin),TT==S)?EOF:*S++)
char BB[<<],*S=BB,*TT=BB;
inline int in(){
r int x=; r bool f=; r char c;
for (;(c=getchar())<''||c>'';f=c=='-');
for (x=c-'';(c=getchar())>=''&&c<='';x=(x<<)+(x<<)+c-'');
return f?-x:x;
}
namespace Treap{
inline int Rand(){
static int x=;
return x^=x<<,x^=x>>,x^=x<<;
}
struct task{int lt,rt;};
struct node{
node *ls,*rs;task v;int pri,sz;
node(task a):v(a){ls=rs=NULL;pri=Rand();sz=;}
inline void up(){sz=(ls?ls->sz:)+(rs?rs->sz:)+;}
}*root;
struct Droot{node *a,*b;};
inline int Size(node *x){return x?x->sz:;}
node *merge(node *a,node *b){
if (!a) return b;
if (!b) return a;
if (a->pri<b->pri){
a->rs=merge(a->rs,b);
a->up();return a;
}else{
b->ls=merge(a,b->ls);
b->up();return b;
}
}
Droot split(node *a,int k){
if (!a) return (Droot){NULL,NULL};
r Droot y;if (Size(a->ls)>=k){
y=split(a->ls,k);
a->ls=y.b;a->up();y.b=a;
}else{
y=split(a->rs,k-Size(a->ls)-);
a->rs=y.a;a->up();y.a=a;
}return y;
}
int find_pre(node *x,task a){
if (!x) return ;
if (x->v.rt<a.lt) return find_pre(x->rs,a)+Size(x->ls)+;
return find_pre(x->ls,a);
}
int find_nxt(node *x,task a){
if (!x) return ;
if (x->v.lt>a.rt) return find_nxt(x->ls,a);
return find_nxt(x->rs,a)+Size(x->ls)+;
}
inline int new_task(){
r task a;a.lt=in(),a.rt=in();
r int L=find_pre(root,a),R=find_nxt(root,a);
r Droot y=split(root,R);r Droot x=split(y.a,L);
r int ans=Size(x.b);r node *newd=new node(a);
root=merge(merge(x.a,newd),y.b);return ans;
}
inline int Get_Ans(){return Size(root);}
}
int main(){
int q=in();while(q--){
char op=getchar(); while(op!='A'&&op!='B') op=getchar();
if (op=='A') printf("%d\n",Treap::new_task());
else printf("%d\n",Treap::Get_Ans());
}
}
【luogu2161】【SHOI2009】Booking会场预约的更多相关文章
- [SHOI2009]Booking 会场预约
题目:洛谷P2161. 题目大意:有一些操作,分为两种: A.增加一个从第l天到第r天的预约,并删除与这个预约冲突的其他预约,输出删除了多少个预约. B.输出当前有效预约个数. 两个预约冲突定义为两个 ...
- 【题解】P2161[SHOI2009]会场预约(set)
[题解][P2161 SHOI2009]会场预约 题目很像[[题解]APIO2009]会议中心 \(set\)大法好啊! 然后我们有个小\(trick\)(炒鸡帅),就是如何优雅地判断线段交? str ...
- [LuoguP2161[ [SHOI2009]会场预约 (splay)
题面 传送门:https://www.luogu.org/problemnew/show/P2161 Solution splay 的确有线段树/树状数组的做法,但我做的时候脑残没想到 我们可以考虑写 ...
- 2021.12.08 [SHOI2009]会场预约(平衡树游码表)
2021.12.08 [SHOI2009]会场预约(平衡树游码表) https://www.luogu.com.cn/problem/P2161 题意: 你需要维护一个 在数轴上的线段 的集合 \(S ...
- [SHOI2009] 会场预约 - Treap
Description PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也 ...
- BZOJ2028: [SHOI2009]会场预约(set)
Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 425 Solved: 213[Submit][Status][Discuss] Description ...
- P2161 [SHOI2009]会场预约
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- P2161 [SHOI2009]会场预约 (线段树:线段树上的不重复覆盖数)
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
随机推荐
- Beta敏捷冲刺每日报告——Day5
1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.6 00:00 -- 2017.11.7 00:00 讨论时间地点 2017.11.6 早9:30,电话会议会议 ...
- android 广播安装指定下载的apk
// 广播出去,由广播接收器来处理下载完成的文件 Intent sendIntent = new Intent("com.test.downloadComplete"); ...
- Android 4.4 沉浸式透明状态栏
原文链接:http://www.bkjia.com/Androidjc/913061.html 第一种方法 这里写代码片第一种方法,在代码设置: if(VERSION.SDK_INT >= VE ...
- git cherry-pick 整理
git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作.例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并, ...
- OpenShift实战(一):OpenShift高级安装
1.1 服务器基本信息 本次安装采用一个master.5个node.3个etcd,node节点两块硬盘,60G磁盘用于docker storage,xxx改为自己的域名或主机名. 节点 功能 IP 内 ...
- iot会议纪要 20180105
1.需求概述设备 <-->物接入 <--> 云端认证授权协议解析主题 端点endpoint(地址)->设备thing(用户)->身份principal(密码)-&g ...
- GIT入门笔记(13)- GUI GIT
- Scala入门(1)Linux下Scala(2.12.1)安装
Scala入门(1)Linux下Scala(2.12.1)安装 一.文件准备 1.1 文件名称 scala-2.12.1.tgz 1.2 下载地址 http://www.scala-lang.org/ ...
- css(1-1)样式表
CSS Id 和 Class id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. id ...
- LinkedHashMap就这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...