mcfx's blog

题解、Writeup、游记和碎碎念

包含标签 线段树 的文章

BZOJ 4539: [Hnoi2016]树

小 A 想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了。开始,小 A 只有一棵结点数为 N 的树,结点的编号为 1,2,…,N,其中结点 1 为根;我们称这颗树为模板树。小 A 决定通过这棵模板树来构建一颗大树。构建过程如下:(1)将模板树复制为初始的大树。(2)以下(2.1)(2.2)(2.3)步循环执行 M 次(2.1)选择两个数字 a,b,其中 1<=a<=N,1<=b<=当前大树的结点数。(2.2)将模板树中以结点 a 为根的子树复制一遍,挂到大树中结点 b 的下方(也就是说,模板树中的结点 a 为根的子树复制到大树中后,将成为大树中结点 b 的子树)。(2.3)将新加入大树的结点按照在模板树中编号的顺序重新编号。例如,假设在进行 2.2 步之前大树有 L 个结点,模板树中以 a 为根的子树共有 C 个结点,那么新加入模板树的 C 个结点在大树中的编号将是 L+1,L+2,…,L+C;大树中这 C 个结点编号的大小顺序和模板树中对应的 C 个结点的大小顺序是一致的。下面给出一个实例。假设模板树如下图:
11(4).png
根据第(1)步,初始的大树与模板树是相同的。在(2.1)步,假设选择了 a=4,b=3。运行(2.2)和(2.3)后,得到新的大树如下图所示
22(2).png
现在他想问你,树中一些结点对的距离是多少。

BZOJ 4700: 适者

敌方有 n 台人形兵器,每台的攻击力为 Ai,护甲值为 Di。我方只有一台人形兵器,攻击力为 ATK。战斗看作回合制, 每回合进程如下:
·1 我方选择对方某台人形兵器并攻击,令其护甲值减少 ATK,若护甲值<0 则被破坏。
·2 敌方每台未被破坏的人形兵器攻击我方基地造成 Ai 点损失。
但是,在第一回合开始之前,某两台敌方的人形兵器被干掉了(秒杀)。问最好情况下,我方基地会受到多少点损 失。

BZOJ 3196: Tyvj 1730 二逼平衡树

您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询 k 在区间内的排名 2.查询区间内排名为 k 的值 3.修改某一位值上的数值 4.查询 k 在区间内的前驱(前驱定义为小于 x,且最大的数) 5.查询 k 在区间内的后继(后继定义为大于 x,且最小的数)

BZOJ 3038: 上帝造题的七分钟2

XLk 觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 "第一分钟,X 说,要有数列,于是便给定了一个正整数数列。 第二分钟,L 说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k 说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要是 noip 难度,于是便有了数据范围。 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。 第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过 64 位有符号整数类型的表示范围的限制。 第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。" ——《上帝造题的七分钟·第二部》 所以这个神圣的任务就交给你了。

BZOJ 1798: [Ahoi2009]Seq 维护序列

老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为 N 的数列,不妨设为 a1,a2,…,aN 。有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模 P 的值。