【题解】[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;
}

最新文章

  1. 成 功 的 背 后 !( 致给所有IT人员)
  2. 利用css3制作的几个loading图
  3. 足球游戏AI_资料收集
  4. ReflectUitls类的编写和对反射机制的解析
  5. python简明手册学习
  6. sublimetext
  7. LeetCode:Remove Duplicates from Sorted List I II
  8. 生成动态前缀且自增号码的Oracle函数
  9. PowerShell 导出SharePoint管理中心解决方式
  10. Python元组、列表、字典
  11. Docker创建MySQL集装箱
  12. MVC验证13-2个属性至少输入一项
  13. 浅谈java发射机制
  14. 也谈TDD,以及三层架构、设计模式、ORM……:没有免费的午餐
  15. 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)
  16. Hadoop Mapreduce 调优
  17. IPV4/IPV6双协议栈配置案例
  18. ubuntu 18.04下安装配置Hue问题记录
  19. hihoCoder week4 Trie图
  20. metasploit framework(十一):获取漏洞信息

热门文章

  1. Node.js 文件系统流pipe到Http响应流中
  2. 简单的图片处理servlet
  3. Warning: isMounted(...) is deprecated in plain JavaScript React classes.
  4. 跟踪运行时错误 vue
  5. trac 的安装设置
  6. NSNotification的几点说明
  7. jira报错,此域不支持您输入的日期
  8. SpringMVC 学习笔记(十一) SpirngMVC执行流程
  9. sprint3 【每日scrum】 TD助手站立会议第七天
  10. Selenium3.X 与 Javascript (Nodejs)