原题传送门

题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作:

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会场预约的更多相关文章

  1. [SHOI2009]Booking 会场预约

    题目:洛谷P2161. 题目大意:有一些操作,分为两种: A.增加一个从第l天到第r天的预约,并删除与这个预约冲突的其他预约,输出删除了多少个预约. B.输出当前有效预约个数. 两个预约冲突定义为两个 ...

  2. 【题解】P2161[SHOI2009]会场预约(set)

    [题解][P2161 SHOI2009]会场预约 题目很像[[题解]APIO2009]会议中心 \(set\)大法好啊! 然后我们有个小\(trick\)(炒鸡帅),就是如何优雅地判断线段交? str ...

  3. [LuoguP2161[ [SHOI2009]会场预约 (splay)

    题面 传送门:https://www.luogu.org/problemnew/show/P2161 Solution splay 的确有线段树/树状数组的做法,但我做的时候脑残没想到 我们可以考虑写 ...

  4. 2021.12.08 [SHOI2009]会场预约(平衡树游码表)

    2021.12.08 [SHOI2009]会场预约(平衡树游码表) https://www.luogu.com.cn/problem/P2161 题意: 你需要维护一个 在数轴上的线段 的集合 \(S ...

  5. [SHOI2009] 会场预约 - Treap

    Description PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也 ...

  6. BZOJ2028: [SHOI2009]会场预约(set)

    Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 213[Submit][Status][Discuss] Description ...

  7. P2161 [SHOI2009]会场预约

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  8. P2161 [SHOI2009]会场预约 (线段树:线段树上的不重复覆盖数)

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  9. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

随机推荐

  1. 实验三《Java面向对象程序设计》实验报告

    20162308 实验三<Java面向对象程序设计>实验报告 实验内容 XP基础 XP核心实践 IDEA工具学习 密码学算法基础 实验步骤 (一)Refactor/Reformat使用 p ...

  2. python的Flask 介绍

    Flask 介绍 知识点 微框架.WSGI.模板引擎概念 使用 Flask 做 web 应用 模板的使用 根据 URL 返回特定网页 实验步骤 1. 什么是 Flask? Flask 是一个 web ...

  3. Binary Tree Xorder Traversal

     * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeN ...

  4. JAVA_SE基础——64.StringBuffer类 ①

     字符串特点:字符串是常量:它们的值在创建之后不能更改 字符串的内容一旦发生了变化,那么马上会创建一个新的对象. 注意:字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象. publ ...

  5. Python之旅_计算机基础入门

    一.计算机基础 1.Python是编程语言 语言:一种事物与另一种事物沟通的介质. 编程语言:程序员与计算机沟通的介质. 什么是编程:程序员用编程语言把自己的逻辑思想下来,编程的结果就是一堆文件. 为 ...

  6. php的api及登录的权限验证

    类,库,接口(APi),函数,这些概念都是根据问题规模的大小来界定的.一个很小的问题肯定没有必要写成一个库,只需要写几句话就行了. 但是比如一个登录验证,这个功能很强大,很通用,可能前台后台都需要用到 ...

  7. 什么是KMP算法?KMP算法推导

    花了大概3天时间,了解,理解,推理KMP算法,这里做一次总结!希望能给看到的人带来帮助!! 1.什么是KMP算法? 在主串Str中查找模式串Pattern的方法中,有一种方式叫KMP算法 KMP算法是 ...

  8. Mego开发文档 - 复杂查询

    复杂查询 Mego 还支持一些更高级的LLINQ查询写法,本文只列出一部分. 分组汇总查询 using (var db = new OrderManageEntities()) { var query ...

  9. Linux show funny time[ liunx 有趣的东西展示]

    Linux show funny time 1.sl 奔跑吧,火车! nick-suo@ubuntu:~$ sudo apt-get install sl 2.telnet 星球大战 nick-suo ...

  10. SpringMVC(二):RequestMapping修饰类、指定请求方式、请求参数或请求头、支持Ant路径

    @RequestMapping用来映射请求:RequestMapping可以修饰方法外,还可以修饰类 1)SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求: 2 ...