补题日记[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(xxi+yyi)
= 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(xxi,x+xi)+max(yyi,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 \\ =maxxxi+yyi,xxiy+yi,x+xi+yyi,x+xiy+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)+(xiyi),(xy)+(xi+yi),(x+y)+(xiyi),(xy)+(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 xiyi,xi+yi,xiyi,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的主要内容,如果未能解决你的问题,请参考以下文章

补题日记[2022杭电暑期多校3]B-Boss Rush

补题日记[2022杭电暑期多校3]B-Boss Rush

补题日记[2022杭电暑期多校2]K-DOS Card

补题日记[2022杭电暑期多校2]K-DOS Card

补题日记[2022杭电暑期多校1]C-Backpack

补题日记[2022杭电暑期多校1]B-Dragon slayer