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 ...
随机推荐
- spring工具类获取bean
import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebAppl ...
- Mysql 性能优化20个原则(4)
16. 垂直分割 “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段,很恐怖) 示例一:在 ...
- 创建git仓库及简单操作命令
1.把已有的项目代码纳入git管理 $ cd projectdir #projectdir项目代码所在的文件夹 $ git init 2.新建的项目直接使用git管理 $ cd dir #dir ...
- 【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门演示样例
一. 工作区域具体解释 1. Scence视图 (场景设计面板) scence视图简单介绍 : 展示创建的游戏对象, 能够对全部的游戏对象进行 移动, 操作 和 放置; -- 演示样例 : 创建一个球 ...
- 基于canvas和Web Audio的音频播放器
wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件.通过wavesurfer.js你能够使用它来制作各种HTML5音频播放器,它能够在各种支持 Web A ...
- HDU 5327 Olympiad (多校)
Olympiad Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- Vue 建立工程
npm install -g vue npm install -g vue-cli vue init webpack my-project cd my-project npm isntall npm ...
- Django-权限信息自定义标签
自定义权限标签: import re from django.template import Library from django.conf import settings register = L ...
- snip_进制转换代码段
10进制转成16进制. /* 程序:10进制转16进制的C语言实现 描述: 关键: 获得余 获得整 整为零 则退出 */ #include<stdio.h> #define N 10 #d ...
- Mac中Maven的安装步骤
1.下载Maven,并解压到某个目录. 2.打开terminal,输入一下命令. open .bash_profile; 3.在bash_profile中,编辑文件 内容如下. 4.保存bash_p ...