题意
Snuke 喜欢旗子.
Snuke 正在将N 个旗子摆在一条线上.
第i 个旗子可以被放在位置xi 或yi 上.
Snuke 认为两个旗子间的最小距离越大越好. 请你求出最大值.
1 <= N <= 10^4; 1 <= xi, yi <= 10^9.
分析
先二分答案,将其转化为判定性问题。那么这显然就是一个2-SAT的模型。
将每个点按照坐标排序后,显然每个点能连到的必然是连续的一段,用线段树优化即可。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=20005;
int n,a[N],sz,tim,tot,cnt,last[N*6],low[N*6],dfn[N*6],stack[N*6],bel[N*6],top,pos[N];
bool inst[N*6];
struct edge{
int to,next;}e[N*300];
struct tree{
int num;}t[N*5];
pair<int,int> w[N];
int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){
x=