CF97B Superset超级集合
这题主要是构造难想。看看数据范围发现连\(O(n^2)\)都被卡了,然后 考试的名称提醒我 想到了分治。
坐标按横坐标为关键字排序后找中间的点进行分治不是点分治qwq。
考虑让中间点作一条平行于y轴的直线,让每个点i(mid除外)向这条直线引垂线交于一个点 \(S_i\),那么这个点一定可以加入。
原因:
可行性证明:
考虑不包含 \(S_i\) 的点,由于左半边和右半边都已满足条件,当左边的点i和右边的点j组成矩形时,矩形边缘上一定有2个点\(S_i,S_j\),于是这些S就能使左右合并。
考虑包含 \(S_i\) 的点。如果它和点j组成矩形,那么边缘上一定有点 \(S_j\) ,满足题意。
分治完了记得去重哦~
由于点数是 \(n\log n\) 的级别,所以数组也要开到 \(n\log n\)
#include<bits/stdc++.h>
using namespace std;
const int N=150005;
int n,len,tot;
struct point{
int x,y;
}a[N],ans[N],p[N];
bool cmp(const point &a,const point &b)
{
if(a.x!=b.x)return a.x<b.x;
else return a.y<b.y;
}
void msort(int l,int r)
{
if(l==r){ans[++tot]=a[l];return;}
if(l>r)return;
int mid=(l+r)>>1;
msort(l,mid-1);msort(mid+1,r);
for(int i=l;i<=r;++i)
{
point tmp;
tmp.x=a[mid].x;
tmp.y=a[i].y;
ans[++tot]=tmp;
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1,cmp);
msort(1,n);
sort(ans+1,ans+tot+1,cmp);
ans[0].x=ans[0].y=1000000007;
for(int i=1;i<=tot;++i)
{
if(ans[i].x!=ans[i-1].x||ans[i].y!=ans[i-1].y)
p[++len]=ans[i];
}
printf("%d\n",len);
for(int i=1;i<=len;++i)
printf("%d %d\n",p[i].x,p[i].y);
return 0;
}
CF97B Superset超级集合的更多相关文章
- DOM、BOM 操作超级集合
本章内容: 定义 节点类型 节点关系 选择器 样式操作方法style 表格操作方法 表单操作方法 元素节点ELEMENT 属性节点attributes 文本节点TEXT 文档节点 Document 位 ...
- CF97B Superset
嘟嘟嘟cf 嘟嘟嘟luogu 刚开始我看成了对于一个点\(i\),存在一个点\(j\)满足三个条件之一,而不是任意的\(j\).结果自然\(gg\)了,第二个点就\(WA\)了. 也不知怎么来的思路: ...
- JavaScript大杂烩7 - 理解内置集合
JavaScript内置了很多对象,简单的类型如String,Number,Boolean (相应的"值类型"拥有相同的方法),复杂一点的如Function,Object,Arra ...
- 5-python的封装与结构 - set集合
目录 1 封装与解构 1.1 封装 1.2 解构 1.3 Python3的解构 2 set类型 2.1 set的定义 2.2 set的基本操作 2.2.1 增加元素 2.2.2 删除元素 2.2.3 ...
- php预定义常量&变量
PHP中可以使用预定义常量获取PHP中的信息,常用的预定义常量如下表所示. 常量名 功能 _FILE_ 默认常量,PHP程序文件名 _LINE_ 默认常量,PHP程序行数 PHP_VERSION ...
- 高性能队列Disruptor系列2--浅析Disruptor
1. Disruptor简单介绍 Disruptor是一个由LMAX开源的Java并发框架.LMAX是一种新型零售金融交易平台,这个系统是建立在 JVM 平台上,核心是一个业务逻辑处理器,它能够在一个 ...
- 在Git上如何强推代码规范
引言 最近参加了“前端规范制定topic”小组,小组成员一起制定了html.css.js.es6.vue和react等规范,但规范制定好了怎么进行推广去强制执行呢,已知我们的项目都是用git做管理的, ...
- Python全栈-magedu-2018-笔记10
第三章 - Python 内置数据结构 集set 约定 set 翻译为集合 collection 翻译为集合类型,是一个大概念 set 可变的.无序的.不重复的元素的集合 set定义 初始化 set( ...
- [No0000199]设计模式总结
设计模式之间的关系: 设计模式总概况: 一.设计原则 .单一职责原则 一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一 ...
随机推荐
- AVL-Tree (平衡二叉树)
看到网上AVL-Tree大多数都是用相同的实现方式 —— 递归进行插入.删除.维护平衡等,而我比较喜欢用带父指针的数据结构,于是想了一下午,用C实现了一个迭代版的. 由于没有暂时没有好的画二叉树的工具 ...
- 为U盘装备Ubuntu工作学习两不误
题记: 在上一篇文章中,我介绍了让Ubuntu 10.04完美支持Thinkpad小红点Trackpoint.看上去,显得有些不痛不痒,实际上有些同学会因为小红点中键不能正常使用,而放弃在Th ...
- 学习Javascript的8张思维导图
分别归类为: javascript变量 javascript运算符 javascript数组 javascript流程语句 javascript字符串函数 javascript函数基础 javascr ...
- 复习jquery菜鸟教程
https://www.runoob.com/jquery/jquery-plugin-treeview.html
- 16核锐龙9延期真正原因 A饭热情太恐怖了
锐龙9 3950X处理器是AMD发布的首款16核游戏处理器,原本会在9月上市,上周末AMD官方宣布它会延期2个月上市,会在11月跟锐龙Threadripper三代处理器一起上市. 锐龙9 3950X的 ...
- 「POJ1147」The Buses
传送门 POJ Vjudge 解题思路 可以首先预处理一下可能成为一条线路的所有方案,然后把这些可能的方案按照长度降序排序,即按照路线上的时间节点从多到少排序. 因为这样我们就可以先确定更多的时刻的状 ...
- 算法竞赛入门经典——读书笔记day1
1-1:整数值用%d输出,实数用%f输出. 1-2:整数/整数=整数,浮点数/浮点数=浮点数. 1-3:scanf中的占位符和变量的数据类型应一一对应,且每个变量前需要加&符号. 1-4:在算 ...
- 二 配置数据字典&异步查询客户
数据字典: 字典表和客户表的关系 配置字典表 配置客户表 Spring管理映射文件 1 字典表和客户表的关系 2 配置字典表 3 配置客户表 4 Spring管理映射文件 异步查询客户: 页面加载 ...
- 三 SVN权限设置&用户&组
创建组,添加用户之后进行权限的设置:
- 今日份学习: Spring中使用AOP并实现redis缓存?
笔记 在Spring中如何使用AOP? Spring是如何切换JDK动态代理和CGLIB的? spring.aop.proxy-target-class=true (在下方第二个链接中,原生doc中提 ...