Hackerearth: Mathison and the Pokémon fights
Mathison and the Pokémon fights code
这是一道比较有意思,出的也非常好的题目。
给定$n$个平面上的点$(x_i, y_i)$,(允许离线地)维护$Q$个操作:
1. 0 $p$ $x$ $y$ 更改第$p$个点为$(x, y)$。
2. 1 $l$ $r$ $x$ $y$ 求第l个到第r个点与$(x, y)$之间的Chebyshev距离之和,即
$$ \sum_{i=l}^r \max\{|x_i-x|, |y_i-y|\}. $$
分析:
Chebyshev距离可以通过变换
$$(x, y) \mapsto (x+y, x-y)$$
转化为Manhattan距离,即 $(x_1, y_1)$与$(x_2, y_2)$的Chebyshev距离 等于 $(x_1+y_1, x_1-y_1)$与$(x_2+y_2, x_2-y_2)$的Manhattan距离的一半(因为变换的时候坐标放大了一倍)。
经过这个变换之后,x坐标和y坐标就相互独立了,因为两个点$(x_1, y_1)$与$(x_2, y_2)$的Manhattan距离为$|x_1-x_2|+|y_1-y_2|$。
于是转换成了一个更简单的题目:
给定一个长度为$n$的序列$a_i$,(允许离线地)维护$Q$个操作:
1. 0 $p$ $x$ 更改$a_p$为$x$。
2. 1 $l$ $r$ $x$ 求$\sum_{i=l}^r |x-x_i|$。
这题有很多种做法,官方题解的复杂度是$O(n \sqrt n \log n)$,不尽如人意。
我在比赛时成为了全场最快的解法,总时间18.65s,最大点1.16s,大概比速度第二快的(总时间大约30+s)快一倍。
解法是离线的cdq分治+树状数组。
把每个操作分成两个操作:
1. 0 $p$ $x$ 认为是 ①在平面上删除$(p, x_p)$,②在平面上插入$(p, x)$。
2. 1 $l$ $r$ $x$ 认为是 ①求$1\dots r$之和,②求$1\dots l$之和。
这样可以通过cdq维护二维偏序来解决这个问题。
时间复杂度$O((n+Q) \log^2(n+Q))$。
Hackerearth: Mathison and the Pokémon fights的更多相关文章
- 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】
Pokémon GO Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Pokémon Go呼应设计:让全世界玩家疯狂沉迷
引言:什么样的呼应设计会让移动游戏玩家沉迷?那必须为玩家构建一个属于玩家本人或者被玩家认可的虚拟环境,或者说是被玩家认可的虚拟世界.在移动游戏时代,想要做到这一点并不容易.但Pokémon Go却做到 ...
- 【HDU-6146】Pokémon GO(dp)
百度之星2017复赛1003 HDU-6146 Pokémon GO 题意 两行n列,只能到相邻格子,可以斜着.求遍历的方案数. 题解 dp[i]从一个点出发遍历长度i最后回到这一列的方案数 dp2[ ...
- 【CF625E】Frog Fights(模拟)
[CF625E]Frog Fights(模拟) 题面 CF 洛谷 翻译: 有\(n\)只青蛙在一个被分为了\(m\)等分的圆上,对于每份顺时针依次标号. 初始时每只青蛙所在的位置是\(p_i\),速度 ...
- Magisk+Xposed+Root switch+Pokémon GO
If you follow Android Police, there's a good chance you've got a rooted device, whether it be an eas ...
- Codeforces Round #342 (Div. 2) E. Frog Fights set 模拟
E. Frog Fights 题目连接: http://www.codeforces.com/contest/625/problem/E Description stap Bender recentl ...
- hdu 6146 Pokémon GO (计数)
Problem Description 众所周知,度度熊最近沉迷于 Pokémon GO. 今天它决定要抓住所有的精灵球!为了不让度度熊失望,精灵球已经被事先放置在一个2*N的格子上,每一个格子上都有 ...
- C2. Pokémon Army (hard version) 解析(思維)
Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...
- C1. Pokémon Army (easy version) 解析(DP)
Codeforce 1420 C1. Pokémon Army (easy version) 解析(DP) 今天我們來看看CF1420C1 題目連結 題目 對於一個數列\(a\),選若干個數字,求al ...
随机推荐
- Linux下多线程编程-信号量
今天来谈谈线程的同步--信号量. 首先来看看一些概念性的东西: 如进程.线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行:B依言执行,再将结果给 ...
- SQL Server I/O Basics
SQL Server I/O Basics Chapter 1http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/sqlIO ...
- 【spring data jpa】报错如下:Caused by: javax.persistence.EntityNotFoundException: Unable to find com.rollong.chinatower.server.persistence.entity.staff.Department with id 0
报错如下: org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com.rollong.chi ...
- 【面试 AOP】【第八篇】AOP的问题
1.AOP的原理以及应用场景 面向切面编程,不修改原有代码逻辑的情况下进行逻辑增强. 使用场景:短信业务,restful返回统一响应体等等. ============================= ...
- ipython结合virtualenv使用
1.virtualenv使python的开发环境相互隔离,隔离环境可以安装自己的依赖包,避免冲突 2.ipython是交互使用python变的便利 3.在virtualenv环境里使用ipython即 ...
- BUPT复试专题—分数加法(2014网研)
题目描述 求2^-a + 2^-b,其中a和b均为正整数,结果用最简分数表示 输入 第一行为测试数据的组数T (1~400).请注意,任意两组测试数据之间相互独立的.每组测试数据一行,包含两个整数a和 ...
- BUPT复试专题—最小距离查询(2013)
题目描述 给定一个由小写字母a到z组成的字符串S,其中第i个字符为S[i](下标从0开始).你需要完成下面两个操作:INSERT c 其中c是一个待输入的字符.你需要在字符串的末尾添加这个字符.保证 ...
- sed 常用命令
删除以ifeq开头的行 sed -i "/^ifeq/d" file 删除空行 sed -i '/^$/d' file
- DRF之视图组件 三次封装
1.为什么要进行封装 1.1 在处理表的时候,如果有几十张表都需要增删改查查时,如果每一张表都写这些方法,会让代码显得冗余,所以需要将这些方法进行封装,然后不同的表都去继承这写方法.(这是思路) 1. ...
- Cookie 和 Session 的区别 与联系
一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,W ...