2023.3.17 闲话
joke3579 不屑于称扫描线为扫描线而称之为顺着扫,orz .
早在若干年前就在多项式时间复杂度内解决 NP-Hard 问题的 joke3579 肆意锐评 —— 人类是不可能解决 NP-Hard 问题的!
我要给 joke3579 今日闲话引流:闲话 23.3.17 .
btw,不用 Kruskal 重构树的连通块重标号(封装):
struct Relabeler
{
int nxt[N], lst[N], id[N], fa[N];
int get(int x){return x == fa[x] ? x : fa[x] = get(fa[x]);}
inline void merge(int u, int v)
{
u = get(u); v = get(v);
if (u == v) return ;
nxt[lst[u]] = v; lst[u] = lst[v];
fa[v] = u;
}
inline void relabel(int n)
{
static bool uok[N];
for (int i=1; i<=n; i++) uok[nxt[i]] = true;
int cc = 0;
for (int i=1; i<=n; i++)
{
if (uok[i]) continue;
int u = i; id[u] = ++cc;
while (~nxt[u]){u = nxt[u]; id[u] = ++cc;}
}
}
inline pii range(const int& u){int _ = get(u); return make_pair(id[_], id[lst[_]]);}
inline int at(const int& u) const {return id[u];}
inline void clear(int n){iota(fa, fa+1+n, 0); memset(nxt, -1, sizeof nxt); iota(lst, lst+1+n, 0);}
Relabeler(){clear(N-1);}
};
UPD. 看 SyadouHayami 博客选中的背景色是 #66CCFF 一类的东西(因为有背景干扰我拾色器没拾到准的),于是我就把我选中的背景色改成了 #39C5BB,不过如果刻意的去注意这一点确实不很漂亮,不知道为什么,不过平时看着也没有那么不漂亮啦 .
两个点 \(X(x_1,x_2,\cdots,x_k)\) 和 \(Y(y_1,y_2,\cdots,y_k)\) 的 Manhattan 距离:\(\displaystyle d(X,Y)=\sum_{i=1}^k|x_i-y_i|\) .
一个 Trick:拆 \(|x|=\max\{x,-x\}\) .
这样的话 \(k\) 个绝对值就可以改成 \(2^k\) 个 max .
Luogu1648 看守
给 \(d\) 维空间 \(n\) 个点,求曼哈顿距离最大的两个点的曼哈顿距离 .
\(2\le n\le10^6\),\(d\le4\) .
暴力拆对于每种情况找出最大最小直接减 \(\Theta(n2^d)\) 可以通过 .
CF1093G Multidimensional Queries
维护 \(n\) 个 \(k\) 维点支持单点修改区间查上面那个题的问题 .
\(1\le n,q\le 2\times 10^5\),\(1\le k\le 5\),6s .
暴力拆对于每种情况开 \(2^k\) 个线段树按上面问题维护即可 .
时间复杂度 \(\Theta(2^k(n+q)\log n)\) 可以通过 .
还挺有意思的,不过看起来难扩展 .
是不是有点水了 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17227605.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ