【题解】[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)的更多相关文章

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

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

  2. P2161 [SHOI2009]会场预约

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

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

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

  4. [洛谷P2161][SHOI2009]会场预约

    题目大意:有两种操作: $A\;l\;r:$表示加入区间$[l,r]$,并把与之冲突的区间删除,输出删除的区间的个数,区间$A$于区间$B$冲突当且仅当$A\cap B\not=\varnothing ...

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

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

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

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

  7. [SHOI2009] 会场预约 - Treap

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

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

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

  9. LuoguP2161 [SHOI2009]会场预约

    题目地址 题目链接 题解 用fhqtreap对区间进行维护. 可以注意到的是,对于当前存在的预约,他们一定是升序排列的(有重叠的都被删了). 那么就可以用按照位置分裂的fhqtreap搞了(预约无论按 ...

随机推荐

  1. 【转】docker安装PostgreSQL

    原文:https://blog.csdn.net/liuyueyi1995/article/details/61204205 你先确认这两件事:1)执行 docker exec -it dream.p ...

  2. 排查 “Detected Tx Unit Hang”问题

    实现功能: 使用自己已经分配的内存让skb->data指向,而不是使用alloc_malloc(). 部分代码如下: /* * build a new sk_buff */ //struct s ...

  3. IOS--苹果各地区开发者支援的电话号码

    网页地址: https://developer.apple.com/contact/phone/ 中国区的咨询热线:4006 701 855 邓白氏申请中心的电话(400-6701855)

  4. 在UC浏览器打开链接唤醒app,假设没有安装该app,则跳转到appstore下载该应用

    在UC浏览器打开链接唤醒app,假设没有安装该app,则跳转到appstore下载该应用 须要在project中设置例如以下: 1.打开project中的myapp-Info.plist文件 2.打开 ...

  5. Python3链接MySQL数据库

    Python 2.x 上连接MySQL的库倒是不少的,其中比较著名就是MySQLdb(Django项目都使用它:我也在开发测试系统时也使用过),见:http://sourceforge.net/pro ...

  6. PDF如何自动滚动阅读

    PDF如何自动滚动阅读 视图---页面显示---自动滚动 快捷键 Ctrl +shift+H

  7. react-navigation + react-native-vector-icons

    1.安装 yarn add react-navigation react-native-vector-icons 2.创建 root.js import React, {Component} from ...

  8. Odoo12 重大改变

    Table of Contents 重构的功能 ORM 数据导入 库存 库存规则 MRP 多步路线 新功能 IoT     Odoo12 预计 2018/10 在 Odoo experience 20 ...

  9. C++ 输出100—999中所有的水仙花数

    输出100-999中所有的水仙花数,若3位数xyz满足 , 则xyz为水仙花数,例如 , 因此153是水仙花数. #include <iostream> using namespace s ...

  10. RAD Studio XE8 技术研讨会讲义与范例程序下载

     感谢各位程序猿亲临现场參加我们的公布会,现奉上会议当天的讲义与范例程序供大家參考: 2015/5/25~27北京.深圳 『RAD Studio XE8技术研讨会』 下载讲义:http://pan ...