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超级集合的更多相关文章

  1. DOM、BOM 操作超级集合

    本章内容: 定义 节点类型 节点关系 选择器 样式操作方法style 表格操作方法 表单操作方法 元素节点ELEMENT 属性节点attributes 文本节点TEXT 文档节点 Document 位 ...

  2. CF97B Superset

    嘟嘟嘟cf 嘟嘟嘟luogu 刚开始我看成了对于一个点\(i\),存在一个点\(j\)满足三个条件之一,而不是任意的\(j\).结果自然\(gg\)了,第二个点就\(WA\)了. 也不知怎么来的思路: ...

  3. JavaScript大杂烩7 - 理解内置集合

    JavaScript内置了很多对象,简单的类型如String,Number,Boolean (相应的"值类型"拥有相同的方法),复杂一点的如Function,Object,Arra ...

  4. 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 ...

  5. php预定义常量&变量

    PHP中可以使用预定义常量获取PHP中的信息,常用的预定义常量如下表所示. 常量名 功能  _FILE_ 默认常量,PHP程序文件名 _LINE_ 默认常量,PHP程序行数  PHP_VERSION ...

  6. 高性能队列Disruptor系列2--浅析Disruptor

    1. Disruptor简单介绍 Disruptor是一个由LMAX开源的Java并发框架.LMAX是一种新型零售金融交易平台,这个系统是建立在 JVM 平台上,核心是一个业务逻辑处理器,它能够在一个 ...

  7. 在Git上如何强推代码规范

    引言 最近参加了“前端规范制定topic”小组,小组成员一起制定了html.css.js.es6.vue和react等规范,但规范制定好了怎么进行推广去强制执行呢,已知我们的项目都是用git做管理的, ...

  8. Python全栈-magedu-2018-笔记10

    第三章 - Python 内置数据结构 集set 约定 set 翻译为集合 collection 翻译为集合类型,是一个大概念 set 可变的.无序的.不重复的元素的集合 set定义 初始化 set( ...

  9. [No0000199]设计模式总结

    设计模式之间的关系: 设计模式总概况: 一.设计原则 .单一职责原则 一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一 ...

随机推荐

  1. 常见Linux发行版有哪些?

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  2. 嵌入式编程中使用 do{...} while(0) 的解释

    最近在看esp32的idf,有一些宏定义使用了do while(0)这种看起来好像没啥用的代码.然后我查了一下资料,发现在linux内核代码中经常用到这个东西! 现在就将这个东西整理一下. 为什么在内 ...

  3. Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

    在广播中启动一个Dialog时出现如下错误信息:Caused by: android.view.WindowManager$BadTokenException: Unable to add windo ...

  4. nodejs中this详解

    最近在用Nodejs进行APP运维服务管理系统开发时发现,nodejs中的this经常会变,查了下资料后发现this在不同的代码位置中代表不同的涵义,在实际运用过程中可以用var self = thi ...

  5. Python 基础之python运算符

    一.运算符 1.算数运算符 + - * / // % ** var1 = 5var2 = 8 #(1)  + 加res = var1 + var2print(res) # (2)  -  减res = ...

  6. Nginx多站点虚拟主机实现单独启动停止php-fpm、单独控制权限设置

    Nginx多站点虚拟主机实现单独启动停止php-fpm.单独控制权限设置 来源:osyunwei.com 作者:qihang01 发表于:2012-08-19 21:26 点击: 说明: 站点1:bb ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 多iframe应用引起的内存问题

    1. 内存泄漏 1.1 什么是内存泄漏? 程序的运行需要内存.只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存. 对于持续运行的服务进程(daemon),必须及时释放不再用到的内存 ...

  9. eclipse 编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)

    参考:https://blog.csdn.net/u012062810/article/details/46729779

  10. popupwindow使用之异常:unable to add window -- token null is not valid

    使用popwindow中又碰到一个白痴问题,在此留作纪念,希望对大家有帮助 popupwindow之所以叫这个名字,肯定是要从某个地方弹出啦,但是从哪个地方呢?必须是指定一个view嘛 void an ...