数据结构
「CF160E」Buses and People-线段树
· ☕ 3 min read

Bertown 大街可以抽象为一条数轴。在数轴上有 $10^9$ 个巴士站。站点按照它们在数轴上的顺序从 $1$ 到 $10^9$ 的整数编号。这个城市有 $n$ 辆公共汽车。每天第 $i$ 个公共汽车从 $s_i$ 位置出发,到 $f_i$ 位置停止( $s_i < f_i$ ),它在所有位于 $s_i$ 与 $f_i$ 的中间站点停靠并且仅在晚上返回。公共汽车在时间 $t_i$ 开始行驶,并且它也在时间 $t_i$ 完成行驶(行驶、停靠都是瞬间的)。所有公共汽车的开始时间 $t_i$ 都不同。公交车有无限的容量。

Bertown 有很多居民。今天第 $i$ 个人要从 $l_i$ 位置出发到 $r_i$ 位置结束( $l_i < r_i$ );第 $i$ 个人在时间 $b_i$ 进入他的出发位置( $l_i$ )。一方面,每个人都希望尽快到达目的地,另一方面,他不想换乘公交车。

也就是:为第 $i$ 个人挑选的公交汽车 $j$ ,满足 $s_j \leq l_i$, $r_i \leq f_j$ 和 $b_i \leq t_j$ 的条件下,$t_j$ 最小。

你的任务是确定每个人今天是否可以到达目的地,如果可以,找到每个人将乘坐的公交车的号码,不可以则输出 $-1$ 。


「CF115E」Linear Kingdom Races-dp+线段树优化
· ☕ 2 min read

你是一个赛车比赛的组织者,想在线性王国中安排一些比赛。

线性王国有 $n$ 条连续的从左到右的道路。道路从左到右依次编号为从 $1$ 到 $n$ ,因此道路按照升序排列。在这些道路上可能会有几场比赛,每一场比赛都将使用这些道路的某个连续的子序列。而且,如果某场比赛举行了,你将获得一定数额的金钱。没有比赛在时间上重叠,所以每一段道路可以在多个比赛中使用。

不幸的是,所有道路的状况都不佳,需要修理。每条路都有与之相关的维修费用,你需要支付这笔费用来修理道路。只有在某场比赛中需要使用的所有道路都进行了修复,才能进行比赛。你的任务是修复道路并使你的利润最大化。你的利润被定义为你从比赛中获得的总金额减去你花在修理道路上的钱。请注意,您可以决定不修任何道路,并获得利润 $0$ 。

输出你能获得的最大利润。


「CF91E」Igloo Skyscraper-分块
· ☕ 3 min read

有 $n$ 个海象(编号为 $1$ 到 $n$ )参加比赛建造自己的摩天大楼 。在 $t=0$ 时,第 $i$ 个海象的摩天大楼的高度为 $a_i$ 。每一时刻,编号为 $i$ 的海象会完成 $b_i$ 层楼的建造。

在奥运会现场报道的记者向活动组织者提出了 $q$ 次询问。每次询问给出三个数字 $l_i$ ,$r_i$ ,$t_i$。活动组织者用数字 $x$ 回答每个查询,$x$ 满足:

  1. 数字 $x$ 位于从 $l_i$ 到 $r_i$ 的区间,即 $l_i \leq x \leq r_i$ 。

  2. 编号为 $x$ 的海象的摩天大楼在 $t_i$ 时刻拥有编号在 $[l_i,r_i]$ 中所有海象的摩天大楼中的最大高度。

对于每位记者的查询,输出符合上述标准的海象的编号 $x$ 。如果有多个可能的答案,请输出其中任何一个。


「SCOI2016」美味-可持久化线段树
· ☕ 2 min read

一家餐厅有 $n$ 道菜,编号 $1,\dots,n$ ,大家对第 $i$ 道菜的评价值为 $a_i(1 \leq i \leq n)$。有 $m$ 位顾客,第 $i$ 位顾客的期望值为 $b_i$,而他的偏好值为 $x_i$ 。因此,第 $i$ 位顾客认为第 $j$ 道菜的美味度为 $b_i\ \text{XOR}\ (a_j+x_i)$ ,$\text{XOR}$ 表示异或运算。

第 $i$ 位顾客希望从这些菜中挑出他认为最美味的菜,即美味值最大的菜,但由于价格等因素,他只能从第 $l_i$ 道到第 $r_i$ 道中选择。请你帮助他们找出最美味的菜。


「POI2015」Kinoman-线段树
· ☕ 2 min read

共有 $m$ 部电影,编号为 $1$ 到 $m$,第 $i$ 部电影的好看值为 $w[i]$。在 $n$ 天之中(从 $1$ 到 $n$ 编号)每天会放映一部电影,第 $i$ 天放映的是第 $f[i]$ 部。你可以选择 $l,r(1 \leq l \leq r \leq n)$ ,并观看第 $l,l+1,\dots , r$ 天内所有的电影。如果同一部电影你观看多于一次,你会感到无聊,于是无法获得这部电影的好看值。所以你希望最大化观看且仅观看过一次的电影的好看值的总和。


「SHOI2013」发牌-fhq Treap
· ☕ 2 min read

在一些扑克游戏里,如德州扑克,发牌是有讲究的。一般称呼专业的发牌手为荷官。荷官在发牌前,先要销牌。所谓销牌,就是把当前在牌库顶的那一张牌移动到牌库底,它用来防止玩家猜牌而影响游戏。

假设一开始,荷官拿出了一副新牌,这副牌有 $N$ 张不同的牌,编号依次为 $1$ 到 $N$ 。由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为 $1, 2, \dots$ 直到$N$ ,$N$ 号牌在牌库底。为了发完所有的牌,荷官会进行$N$ 次发牌操作,在第 $i$ 次发牌之前,他会连续进行 $R_i$ 次销牌操作, $R_i$ 由输入给定。请问最后玩家拿到这副牌的顺序是什么样的?


「SCOI2014」方伯伯的OJ-动态开点线段树
· ☕ 3 min read

方伯伯正在做他的 OJ 。现在他在处理 OJ 上的用户排名问题。 OJ 上注册了 $n$ 个用户,编号为 $1$ ~ $n$ ,一开始他们按照编号排名。

方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号 ,共有 $m$ 次操作:

  1. 操作格式为 1 x y ,意味着将编号为 $x$ 的用户编号改为 $y$ ,而排名不变,执行完该操作后需要输出该用户在队列中的位置,数据保证 $x$ 必然出现在队列中,同时, $y$ 是一个当前不在排名中的编号。

  2. 操作格式为 2 x ,意味着将编号为 $x$ 的用户的排名提升到第一位,执行完该操作后需要输出执行该操作前编号为 $x$ 用户的排名。

  3. 操作格式为 3 x ,意味着将编号为 $x$ 的用户的排名降到最后一位,执行完该操作后需要输出执行该操作前编号为 $x$ 用户的排名。

  4. 操作格式为 4 k,意味着查询当前排名为 $k$ 的用户编号,执行完该操作后需要输出当前操作用户的编号。

对于 $100\%$ 的数据, $1 \leq n \leq 10^8,1 \leq m \leq 10^5$。

强制在线。


「SCOI2015」情报传递-树链剖分-主席树
· ☕ 2 min read

给定一个 $n$ 个节点的有根树,开始时每个节点的权值都为 $0$ 。一共有 $q$ 个时刻,每个时刻可能有如下两个操作之一:

  1. 给定一个节点 $x$ ,从下一个时刻起每个时刻都给该节点的权值 $+1$(每个节点只会有一次该操作);

  2. 给定两个节点 $x,y$ 以及一个数 $C$ ,求这两个节点的简单路径上权值大于 $C$ 的节点个数,以及简单路径上的所有节点个数。


「BOI2007」Mokia-CDQ分治套CDQ分治
· ☕ 4 min read

在定位系统中,世界被认为是一个 $W \times W$ 的正方形区域,由 $1 \times 1$ 的方格组成。每个方格都有一个坐标 $(x,y)$ , $1 \leq x,y \leq W$。

有三种命令,意义如下:

  • 0 W 初始化一个全零矩阵。本命令仅开始时出现一次。
  • 1 x y A 向方格 $(x,y)$ 中添加A个用户。A是正整数。
  • 2 X1 Y1 X2 Y2 查询 $X1 \leq x \leq X_2$ , $Y_1 \leq y \leq Y_2$ 所规定的矩形中的用户数量
  • 3 无参数 结束程序。本命令仅结束时出现一次。

「AHOI2013」作业-莫队
· ☕ 2 min read

给定了一个长度为 $n$ 的数列和 $m$ 个询问。

每个询问给定数列的一个区间 $[l,r]$ ,你要回答两个问题:

  • 该区间内大于等于 $a$ ,小于等于 $b$ 的数的个数,
  • 所有大于等于 $a$ ,小于等于 $b$ 的,且在该区间中出现过的数值的个数。