【题解】P2161[SHOI2009]会场预约(set)
【题解】[P2161 SHOI2009]会场预约
题目很像[【题解】APIO2009]会议中心
\(set\)大法好啊!
然后我们有个小\(trick\)(炒鸡帅),就是如何优雅地判断线段交?
struct E{
int l,r;
E(int a,int b){l=a,r=b;}
inline bool operator <(const E&a)const{return r<a.l;}
};
真的太帅了!!我思维不行啊!!别人太强了!
众所周知,只要知道一个小于号,就知道所有的逻辑运算了:
- "a==b" -> "!(a<b)&&!(b<a)"
- "a> b" -> "!(a<b)&&!a==b"
其他以此类推。
那么我们这样重载运算符之后,我们发现:
- "a==b" -> "(a.l<=b.l&&a.r>=b.l)||(b.l<=a.l&&b.r>=a.l)"
- "a> b" -> "a.l>b.r"
所以当\(a=b\)时,就是两线段相交,\(a<b\)表示\(a\)完全在\(b\)左边。\(a>b\)表示\(b\)完全在\(a\)右边。
所以直接把所有线段放入\(set\)这个很牛逼的\(stl\),然后直接跑即可,加入的时候把\(set\)里所有和待加入元素"相等"的元素删掉。每个线段都只会操作一次,\(O(n\log n)\)
我们这样做的理由就是利用了\(set\)的"=="号的性质,利用\(stl\)的一部分性质解决自己的问题,真的太强了。
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
template < class ccf > inline ccf qr(ccf ret){ ret=0;
register char c=getchar();
while(c<48||c>57) c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return ret;
}inline int qr(){return qr(1);}
struct E{
int l,r;
E(int a,int b){l=a,r=b;}
inline bool operator <(const E&a)const{return r<a.l;}
};int n;set< E > s;
int main(){
for(register int t=qr(),k;t;--t){
register char c=getchar();
while(c!='A'&&c!='B') c=getchar();
if(c=='A'){
register int t1,t2,t3=0;
t1=qr();t2=qr();
register E now(t1,t2);
for(register auto f=s.find(now);f!=s.end();f=s.find(now))
++t3,s.erase(f);
s.insert(now);
printf("%d\n",t3);
}
else k=s.size(),printf("%d\n",k);
}
return 0;
}
【题解】P2161[SHOI2009]会场预约(set)的更多相关文章
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- P2161 [SHOI2009]会场预约
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- P2161 [SHOI2009]会场预约 (线段树:线段树上的不重复覆盖数)
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- [洛谷P2161][SHOI2009]会场预约
题目大意:有两种操作: $A\;l\;r:$表示加入区间$[l,r]$,并把与之冲突的区间删除,输出删除的区间的个数,区间$A$于区间$B$冲突当且仅当$A\cap B\not=\varnothing ...
- [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 ...
- LuoguP2161 [SHOI2009]会场预约
题目地址 题目链接 题解 用fhqtreap对区间进行维护. 可以注意到的是,对于当前存在的预约,他们一定是升序排列的(有重叠的都被删了). 那么就可以用按照位置分裂的fhqtreap搞了(预约无论按 ...
随机推荐
- 转:大数据 2016 landscape
如图:
- Spring中如何配置事务
学过SSH的都知道,整合了SSH之后,SSH的经典增删改查案例业务逻辑层的代码就十分简单.基本上都是一句话的事. public void addUser(Webuserlogin user) { // ...
- goruntine
一.出让时间片 runtime.Gosched() 二.同步锁 Go语言包中的sync包提供了两种锁类型:sync.Mutex和sync.RWMutex.Mutex是最简单的一种锁类型,同时也比较暴力 ...
- jQuery.delegate() 函数详解
delegate()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 即使是执行delegate()函数之后新添加的元素,只要它符合条件,绑定 ...
- TabControl
1. ItemsSource="{Binding GroupList}" SelectedItem="{Binding SelectedGroupItem,Mode=Tw ...
- MySQL中创建用户分配权限
测试环境:CentOS6.8 和 MySQL5.5.4 一 需求 在项目开发的过程中可能需要开放自己的数据库给别人,但是出于安全的考虑,不能同时开放自己服务器里的其他数据库.那么可以新建一个用户,赋予 ...
- 多trac的安装和配置
其他相关网页: trac+svn: http://wenku.baidu.com/view/84389a81ec3a87c24028c43f.html apache(GCI):http://hi.ba ...
- kvo&kvc
Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property ac ...
- WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
近期遇到一个问题.应用使用过程中突然崩溃,查看dump发现异常信息例如以下: UI dispatcher has encountered a problem: 无法关闭撤消单元.由于不存在已打开的单元 ...
- ”非常危险“的Linux命令
Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险.所以,在输入某些命令前,请多多检查再敲回车. rm –rf rm –rf是删除文件夹和里面附带内容的一种最 ...