补题日记[2022杭电暑期多校3]K-Taxi
Posted cls1277
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了补题日记[2022杭电暑期多校3]K-Taxi相关的知识,希望对你有一定的参考价值。
Pro
https://acm.hdu.edu.cn/showproblem.php?pid=7172
Sol
先考虑没有w的限制的我不会的经典模型怎么做。
∵
∣
x
∣
=
m
a
x
(
x
,
−
x
)
\\because |x|=max(x,-x)
∵∣x∣=max(x,−x)
∴
m
a
x
(
∣
x
′
−
x
i
∣
+
∣
y
′
−
y
i
∣
)
\\therefore max(|x^'-x_i|+|y^'-y_i|)
∴max(∣x′−xi∣+∣y′−yi∣)
=
m
a
x
m
a
x
(
x
′
−
x
i
,
−
x
′
+
x
i
)
+
m
a
x
(
y
′
−
y
i
,
−
y
′
+
y
i
)
=max\\max(x^'-x_i, -x^'+x_i)+ max(y^'-y_i, -y^'+y_i)\\
=maxmax(x′−xi,−x′+xi)+max(y′−yi,−y′+yi)
=
m
a
x
x
′
−
x
i
+
y
′
−
y
i
,
x
′
−
x
i
−
y
′
+
y
i
,
−
x
′
+
x
i
+
y
′
−
y
i
,
−
x
′
+
x
i
−
y
′
+
y
i
=max\\x^'-x_i+y^'-y_i, x^'-x_i-y^'+y_i, -x^'+x_i+y^'-y_i,-x^'+x_i-y^'+y_i \\
=maxx′−xi+y′−yi,x′−xi−y′+yi,−x′+xi+y′−yi,−x′+xi−y′+yi
=
m
a
x
(
x
′
+
y
′
)
+
(
−
x
i
−
y
i
)
,
(
x
′
−
y
′
)
+
(
−
x
i
+
y
i
)
,
(
−
x
′
+
y
′
)
+
(
x
i
−
y
i
)
,
(
−
x
′
−
y
′
)
+
(
x
i
+
y
i
)
=max\\(x^'+y^')+(-x_i-y_i), (x^'-y^')+(-x_i+y_i), (-x^'+y^')+(x_i-y_i),(-x^'-y^')+(x_i+y_i) \\
=max(x′+y′)+(−xi−yi),(x′−y′)+(−xi+yi),(−x′+y′)+(xi−yi),(−x′−y′)+(xi+yi)
因此只需要维护
−
x
i
−
y
i
,
−
x
i
+
y
i
,
x
i
−
y
i
,
x
i
+
y
i
-x_i-y_i,-x_i+y_i,x_i-y_i,x_i+y_i
−xi−yi,−xi+yi,xi−yi,xi+yi就可以
O
(
1
)
O(1)
O(1)的时间求出距离该点的曼哈顿距离最大值。
而本题加入w的限制后,有以下两种二分思路来做:(经过测试,第一种虽做法虽然只比第二种多了个log,但是因为此处的n比较大,因此不能通过;第二种方法关掉流同步的cin和快读也不能A掉,只能scanf才A掉哈哈哈,归为hdu机子的问题上次1e5的O(n)都给我T了我还记着呢)
主要是check(judge)函数的区别:
1、直接二分答案,比如想要判断答案是不是大于等于x,那么找到第一个权值大于等于x的点,根据上面的式子求出原始模型的距离,然后与x比较即可。
因为外面有一层二分,里面可以使用lower_bound二分得到点的下标,因此总的时间复杂度为 O ( n l o g n l o g n ) O(nlognlogn) O(nlognlogn)
2、二分城镇
考虑判断第x个城镇,它的点权为a[x].w,求出编号大于等于x的城镇中到询问点的最大曼哈顿距离d
如果d>a[x].w,答案一定大于等于a[x].w,因此需要进一步二分右半区间;反之同理。总的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)
Code
1.二分答案:
以上是关于补题日记[2022杭电暑期多校3]K-Taxi的主要内容,如果未能解决你的问题,请参考以下文章