Atcoder Contest069F:Flag
题目:https://arc069.contest.atcoder.jp/tasks/arc069_d
题意就是让你在n对数字每一对都选一个数使得任意两个数做差的绝对值最小值最大。
关系显然是一个2-sat,然后我们发现二份答案如果差值为x那么a-x+1到a+x-1是绝对不能选的,
也就是选完以后剩下的一定是这些,所以线段树优化连边覆盖区间。然后在线段树的底层端点再反过来一下即可。
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+;
int head[N],col[N],dfn[N],low[N],s[N],in[N],xx[N],yy[N],pos[N];
int n,c,rt,ans,cnt,tmp,num,pre,top;
struct tree{
int l,r;
}t[N<<];
struct edge{
int to,nex;
}e[N<<];
struct node{
int x,y;
bool operator <(const node &b)const{
return x<b.x;
}
}a[N];
void add(int x,int y)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;
}
void build(int &x,int l,int r)
{
if(l==r){
x=(a[l].y<=n)?a[l].y+n:a[l].y-n;
pos[a[l].y]=l;return;
}x=++num;
int mid=l+r>>;
build(t[x].l,l,mid);build(t[x].r,mid+,r);
add(x,t[x].l);add(x,t[x].r);
return;
}
void change(int x,int l,int r,int L,int R,int p)
{
if(L>R)return;
if(l==L&&r==R)
{
add(p,x);return;
}
int mid=l+r>>;
if(mid>=R)change(t[x].l,l,mid,L,R,p);
else if(L>mid)change(t[x].r,mid+,r,L,R,p);
else change(t[x].l,l,mid,L,mid,p),change(t[x].r,mid+,r,mid+,R,p);
return;
}
void dfs(int x)
{
dfn[x]=low[x]=++tmp;
s[++top]=x;in[x]=;
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(!dfn[y])
{
dfs(y);
low[x]=min(low[x],low[y]);
}
else if(in[y])low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x])
{
c++;int a=-;
do{
a=s[top--];
in[a]=;
col[a]=c;
}while(a!=x);
}
return;
}
void init()
{
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(col,,sizeof(col));
tmp=c=;
return;
}
bool judge(int x)
{
init();
for(int i=;i<=n*;++i)head[i]=;cnt=pre;
for(int i=;i<=n;++i)
{
int AL=lower_bound(a+,a++*n,(node){xx[i]-x+,})-a;
int AR=upper_bound(a+,a++*n,(node){xx[i]+x-,})-a-;
if(AL<=AR)change(rt,,n*,AL,pos[i]-,i),change(rt,,n*,pos[i]+,AR,i);
int BL=lower_bound(a+,a++*n,(node){yy[i]-x+,})-a;
int BR=upper_bound(a+,a++*n,(node){yy[i]+x-,})-a-;
if(BL<=BR)change(rt,,n*,BL,pos[i+n]-,i+n),change(rt,,n*,pos[i+n]+,BR,i+n);
}
for(int i=;i<=num;++i)
if(!dfn[i])dfs(i);
for(int i=;i<=n;++i)
if(col[i]==col[i+n])return ;
return ;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%d%d",&xx[i],&yy[i]);
a[i*-].x=xx[i];a[i*].x=yy[i];
a[i*-].y=i;a[i*].y=i+n;
}num=n*;
sort(a+,a++n*);
build(rt,,n*);
int l=,r=1e9;pre=cnt;
while(l<=r)
{
int mid=l+r>>;
if(judge(mid))ans=mid,l=mid+;
else r=mid-;
}
printf("%d\n",ans);
return ;
}
Atcoder Contest069F:Flag的更多相关文章
- AtCoder Regular Contest 069 D
D - Menagerie Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Snuke, w ...
- AtCoder Regular Contest 090
C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...
- AtCoder Beginner Contest 086 (ABCD)
A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...
- AtCoder Beginner Contest 085(ABCD)
A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...
- AtCoder Beginner Contest 084(AB)
A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit ...
- AtCoder Beginner Contest 069 ABCD题
题目链接:http://abc069.contest.atcoder.jp/assignments A - K-City Time limit : 2sec / Memory limit : 256M ...
- AtCoder Beginner Contest 066 B - ss
题目链接:http://abc066.contest.atcoder.jp/tasks/abc066_b Time limit : 2sec / Memory limit : 256MB Score ...
- AtCoder Beginner Contest 043 D - アンバランス / Unbalanced
题目链接:http://abc043.contest.atcoder.jp/tasks/arc059_b Time limit : 2sec / Memory limit : 256MB Score ...
- Atcoder Grand-014 Writeup
A - Cookie Exchanges 题面 Takahashi, Aoki and Snuke love cookies. They have A, B and C cookies, respec ...
随机推荐
- Angular.js浅谈
至今博主对于MVVM框架比较了解的就只能算有Angular了,首先给大家明确一个概念,Angular1.x才能叫Angular.js,而Angular2.4.5都直接叫Angular了,因为从2开始已 ...
- Java基础-SSM之Spring和Mybatis整合案例
Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...
- Java基础-SSM之Spring的AOP编程
Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...
- Linux 用户和组管理
这是用户和组管理的知识点,不想看文字就看视频吧,还是视频为主,文字为备忘录 视频链接: 项目1用户管理 1.创建一个新用户user01,设置其主目录为/home/user01: #useradd –d ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
- CSS那些事!这个篇幅是我特意开的,不是因为帮助小菜之类的,而是在多人的团队配合中各种命名冲突的规范让人蛋疼
CSS那些事!这个篇幅是我特意开的,不是因为帮助小菜之类的,而是在多人的团队配合中各种命名冲突的规范让人蛋疼. css这个东西只要不是新的离谱都会写,但是每个人的命名风格,方法,都不同 有人喜欢驼峰, ...
- 20155203 2016-2017-2 《Java程序设计》第7周学习总结
20155203 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 1.Lambda表达式.(使用interface函数接口) 2.Lambda的方法参考Met ...
- Spark笔记之累加器(Accumulator)
一.累加器简介 在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark St ...
- 安装informatic过程中的错误
1.Check if the DISPLAY variable is set export DISPLAY=192.168.3.201:0.0 在注销用户并切换到oracle或者infa 用户,就可以 ...
- 用python socket模块实现简单的文件下载
server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...