2019-9-14做题记录

1、【BZOJ1493】【NOI2007】项链工厂

已经是十二年之前的$NOI$了,现在看来古人们学的东西我都不会。

一个环,每个元素有颜色,六种操作。

  • $Rotate\ k$:将项链顺时针旋转$k$个单位。即原$i$位置变成现在$i+k$位置。
  • $Flip$:将项链沿指定对称轴翻转,即将项链的$i$位置和$n+2-i$位置互换。
  • $Swap\ i\ j$:将项链的$i$位置和$j$位置的颜色互换。
  • $Paint\ i\ j\ x$:将项链从$i$位置开始,顺时针$j$个长度的区间染成$x$。
  • $Count$:询问整个项链上颜色块数。
  • $CountSegment\ i\ j$:询问项链从$i$位置开始,顺时针$j$个长度的区间颜色块数。

这个东西肯定是用$splay$更好维护,但是我非要用线段树。
首先,我们把环变成一条链,$5,6$两个操作显然可以在线段树上直接套用维护颜色块数的方法,当越过终点是再把两个答案合并起来就行了。
$3,4$也很简单,单点修改和区间赋值。
$2$也很简单,向$splay$那样打翻转标记即可,等到查询的时候一条链$pushr$下来。
$1$只是映射关系的改变,我们记录一下,等到查的时候还原回来就可以了。
看了题解,发现$2$假了,因为线段树是不能向平衡树那样随意分离出子树(子区间的),所以维护映射关系的时候乘个负号就行了。

2、【CF666E】Forensic Examination

给你一个串$S$以及一个字符串数组$T[1..m]$,$q$次询问,每次问$S$的子串$S[pl..pr]$在$T[l..r]$中的哪个串里的出现次数最多,并输出出现次数。

如有多解输出最靠前的那一个。

这不是我多年之前跳过的后缀自动机码农题吗?估计现在早已忘了,没记错的话,应该是后缀自动机三连。所以就不写了。

3、【CF700E】Cool Slogans

给出一个长度为n的字符串$s[1]$,由小写字母组成。定义一个字符串序列$s[1..k]$,满足性质:$s[i]$在$s[i-1] (i \ge 2)$中出现至少两次(位置可重叠),问最大的$k$是多少,使得从$s[1]$开始到$s[k]$都满足这样一个性质。

$s[i]$在$s[i-1]$中至少出现两次,那我们可以把$s[i-1]$的后面去掉没有被覆盖的部分,这样的话,就是在后缀树上对应着祖先/后代关系的一条链,直接线段树合并判断能否接上并且求个$dis$就行了?

就是这样。(露出黑人拳击手的微笑)

4、【BZOJ3672】【NOI2014】购票(线段树,斜率优化,动态规划)

众所周知,这是道神仙题。

所有的城市形成一个树的结构,从城市$v$前往$SZ$市的方法为:选择城市$v$的一个祖先$a$,支付购票的费用,乘坐交通工具到达$a$。再选择城市$a$的一个祖先$b$,支付费用并到达$b$。以此类推,直至到达$SZ$市。

对于任意一个城市$v$,我们会给出一个交通工具的距离限制$lv$。对于城市$v$的祖先$a$,只有当它们之间所有道路的总长度不超过$lv$时,从城市$v$才可以通过一次购票到达城市$a$,否则不能通过一次购票到达。对于每个城市$v$,我们还会给出两个非负整数$pv,qv$作为票价参数。若城市$v$到城市$a$所有道路的总长度为$d$,那么从城市$v$到城市$a$购买的票价为$dpv+qv$。

求每个城市到根的最小花费。

保留下来,有时间再写。

5、【LR#6】花火(线段树、扫描线)

$n$烟火排成一排,从左到右高度分别为$h_1,h_2,...h_n$,这些高度两两不同。

  • 每次$Yoko$可以选择两个相邻的烟火交换,这样的交换可以进行任意多次。
  • 每次$Yoko$还可以选择两个不相邻的烟火交换,但这样的交换至多进行一次。

你的任务是帮助$Yoko$用最少次数的交换,使这些烟火从左到右的高度递增。

要是我们可以直接得到一个序列选择两个相邻的烟火交换,最多需要多少次

6、

猜你喜欢

转载自www.cnblogs.com/shxnb666/p/11520669.html