当前位置:网站首页>AT2336 [ARC069D] Flags
AT2336 [ARC069D] Flags
2022-07-22 04:24:00 【心怀凉月】
AT2336 [ARC069D] Flags
二分答案,2-sat
判定,线段树优化建边。
线段树上父亲向儿子连边。
对于每个点 x x x,连向与他距离不超过 m i d mid mid 的点的反点,表示选 x x x 就只能选与他距离不超过 m i d mid mid 的点。
最后跑 tarjan
判定即可。
时间复杂度 O ( n log 2 n ) \mathcal O(n\log ^2n) O(nlog2n)。
#include<bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
#define ha putchar(' ')
#define he putchar('\n')
inline int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
x = x * 10 + c - '0', c = getchar();
return x * f;
}
inline void write(int x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
const int _ = 8e4 + 10;
int n, cnt, idx, scc, low[_], dfn[_], id[_], Id[_];
stack<int> s;
vector<pair<int, int>> d;
vector<int> e[_];
void build(int o, int l, int r) {
id[o] = ++cnt;
if (o > 1) e[id[o >> 1]].emplace_back(cnt);
if (l == r) {
int v = d[l - 1].second;
e[id[o]].push_back(v <= n ? v + n : v - n);
return;
}
int mid = (l + r) >> 1;
build(o << 1, l, mid), build(o << 1 | 1, mid + 1, r);
}
void upd(int o, int l, int r, int L, int R, int x) {
if(L > R) return;
if (L <= l && r <= R) {
e[x].emplace_back(id[o]);
return;
}
int mid = (l + r) >> 1;
if (L <= mid) upd(o << 1, l, mid, L, R, x);
if (R > mid) upd(o << 1 | 1, mid + 1, r, L, R, x);
}
pair<int, int> get(int i, int m) {
pair<int, int> ret;
int l = 1, r = i, mid;
while (l <= r) {
mid = (l + r) >> 1;
if (d[i - 1].first - d[mid - 1].first >= m) l = mid + 1;
else r = mid - 1;
}
ret.first = r + 1, l = i, r = n << 1;
while (l <= r) {
mid = (l + r) >> 1;
if (d[mid - 1].first - d[i - 1].first < m) l = mid + 1;
else r = mid - 1;
}
ret.second = l - 1;
return ret;
}
void tarjan(int u) {
low[u] = dfn[u] = ++idx;
s.push(u);
for (int v : e[u])
if (!dfn[v]) {
tarjan(v);
low[u] = min(low[u], low[v]);
} else if (!Id[v]) low[u] = min(low[u], dfn[v]);
if (low[u] == dfn[u]) {
++scc;
while (1) {
int nw = s.top();
s.pop();
Id[nw] = scc;
if (nw == u) break;
}
}
}
bool check(int lim) {
scc = idx = 0;
memset(low, 0, sizeof low);
memset(dfn, 0, sizeof dfn);
memset(Id, 0, sizeof Id);
for (int i = 0; i < _; ++i) e[i].clear();
build(1, 1, cnt = n << 1);
for (int i = 1; i <= n << 1; ++i) {
int r = d[i - 1].second;
pair<int, int> p = get(i, lim);
upd(1, 1, n << 1, p.first, i - 1, r);
upd(1, 1, n << 1, i + 1, p.second, r);
}
for (int i = 1; i <= n << 1; ++i)
if (!dfn[i]) tarjan(i);
for (int i = 1; i <= n; ++i)
if (Id[i] == Id[i + n]) return 0;
return 1;
}
signed main() {
n = read();
for (int i = 1, x, y; i <= n; ++i) {
x = read(), y = read();
d.emplace_back(make_pair(x, i));
d.emplace_back(make_pair(y, i + n));
}
sort(d.begin(), d.end());
int l = 0, r = 1e9, mid;
while (l <= r) {
mid = (l + r) >> 1;
if (check(mid)) l = mid + 1;
else r = mid - 1;
}
write(l - 1), he;
return 0;
}
边栏推荐
- Figure calculation - figure introduction
- 交换机与路由器技术:标准ACL、扩展ACL和命名ACL
- 交換機與路由器技術:標准ACL、擴展ACL和命名ACL
- 内存管理面试问题
- AT5662 [AGC040D] Balance Beam(二分)
- Methods of checking the ranking of papers and periodicals
- Cross domain request of SAP e-commerce cloud Spartacus UI customer system
- Detailed explanation of PN communication between botu PLC and ABB Inverter
- shell语法个人运用中问题小结
- Command line code for server and local data transmission
猜你喜欢
服务器与本地资料互传的命令行代码
Diversified distribution methods of NFT
The principle of embedded IDE, openocd introduction and how stlink connects STM32 board
MP查询条件
ECCV 2022 | 修正FPN帶來的大目標性能損害:You Should Look at All Objects
Distributed scheduling framework elastic job
第三讲 shell语法
Alternet scripting, user interface design function
[ssm]ssm integration ③ (interface test)
像素和颜色
随机推荐
Technologie des commutateurs et des routeurs: ACL standard, ACL étendu et ACL nommé
第三讲 shell语法
记一个composer依赖问题requires composer-runtime-api ^2.0.0 -> no matching package found
交换机与路由器技术:标准ACL、扩展ACL和命名ACL
[ssm]ssm integration ② (development of functional modules)
C # upload pictures to shared folder
【Leetcode周赛--哈希表数对】6164.数位和相等数对的最大和
【解决方案】解决ImportError: Library “GLU“ not found.问题
Figure calculation - figure introduction
How to configure webrtc protocol for low latency playback on easycvr platform v2.5.0 and above?
shell语法个人运用中问题小结
学生如何提高专业英文阅读能力丨传道授业
C server NFS shared folder building and uploading image files
Luogu_ P1112 wave number_ Thinking_ Base / construction / enumeration
PXE network installation
交换机与路由器技术:OSPF路由重分发、OSPF的NSSA区域和OSPF虚链路
Mock simulates data and initiates get and post requests (nanny level tutorials are sure to succeed)
A few minutes before work, express quick start
[solution] solve the importerror: library "Glu" not found
Beautify multiple digits