极光
题目描述
“若是万一琪露诺(俗称rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她。对方表现出兴趣的话,那就慢慢地反问。在她考虑答案的时候,趁机逃吧。就算是很简单的问题,她一定也答不上来。” ——《上古之魔书》
天空中出现了许多的北极光,这些北极光组成了一个长度为n的正整数数列a[i],远古之魔书上记载到:2个位置的graze值为两者位置差与数值差的和:
graze(x,y)=|x-y|+|a[x]-a[y]|。
要想破解天罚,就必须支持2种操作(k都是正整数):
Modify x k:将第x个数的值修改为k。
Query x k:询问有几个i满足graze(x,i)<=k。
由于从前的天罚被圣王lmc破解了,所以rhl改进了她的法术,询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的graze值<=k的对数。(某位置多次修改为同样的数值,按多次统计)
输入格式
第1行两个整数n,q。分别表示数列长度和操作数。
第2行n个正整数,代表初始数列。
第3~q+2行每行一个操作。
输出格式
对于每次询问操作,输出一个非负整数表示答案。
输入样例
3 5
2 4 3
Query 2 2
Modify 1 3
Query 2 2
Modify 1 2
Query 1 1
输出样例
2
3
3
提示
分析
第一眼看过去以为它是可持久化的,就是询问某个历史版本,结果是询问所有历史版本。
所以modify操作
=
=
=加点……
那么题意就是modify加点,然后query查询对于某个点,图上与它的曼哈顿距离小于等于某个值的点的个数。
那么如果我们把坐标系翻转45°之后,这个题就变成了类似于简单题一样的板子题了。
那么怎么翻转呢?
如上图所示,设旋转之前的点的坐标为
(
x
,
y
)
(x,y)
(x,y),旋转之后的坐标为
(
x
′
,
y
′
)
(x',y')
(x′,y′)。
那么我们可以很愉快的列出方程:
{
x
=
2
x
′
+
y
y
′
=
x
′
+
2
y
\begin{cases} x=\sqrt{2} ~ x' +y\\ y'=x'+\sqrt{2}~y\\ \end{cases}
{x=2 x′+yy′=x′+2 y
于是愉快地解得
{
x
′
=
x
−
y
2
y
′
=
x
+
y
2
\begin{cases} x'=\frac{x-y}{\sqrt{2}}\\ y'=\frac{x+y}{\sqrt{2}} \end{cases}
{x′=2x−yy′=2x+y
那个
2
\sqrt{2}
2让我们很不爽,于是我们把整个新坐标轴拉伸一下,每个点的横纵坐标都变为原来的
2
\sqrt{2}
2倍,所以
x
′
=
x
−
y
,
y
′
=
x
+
y
x'=x-y~,~y'=x+y
x′=x−y , y′=x+y。
而我们要在之前的坐标系里求它曼哈顿距离为k的(丑死了的橙色正方形)的区域内的这个正方形,因为坐标都
2
\sqrt{2}
2了,所以就相当于在这个新坐标系里一个正正方方的,长度为
2
k
2k
2k的正方形了。
于是我们就可以快乐CDQ了。