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(x1,x2,,xk)Y(y1,y2,,yk) 的 Manhattan 距离:d(X,Y)=i=1k|xiyi| .

一个 Trick:拆 |x|=max{x,x} .

这样的话 k 个绝对值就可以改成 2k 个 max .

Luogu1648 看守

d 维空间 n 个点,求曼哈顿距离最大的两个点的曼哈顿距离 .

2n106d4 .

暴力拆对于每种情况找出最大最小直接减 Θ(n2d) 可以通过 .

CF1093G Multidimensional Queries

维护 nk 维点支持单点修改区间查上面那个题的问题 .

1n,q2×1051k5,6s .

暴力拆对于每种情况开 2k 个线段树按上面问题维护即可 .

时间复杂度 Θ(2k(n+q)logn) 可以通过 .

还挺有意思的,不过看起来难扩展 .

是不是有点水了 .

posted @   yspm  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示