首页 > 其他分享 >GRE Words

GRE Words

时间:2024-03-10 15:00:26浏览次数:22  
标签:le limits 后缀 线段 GRE Words 区间 排名

我永远喜欢数据结构。

UVA1502 / SP9941

  • 给出 \(n\) 个字符串 \(s_1\sim s_n\),第 \(i\) 个字符串有权值 \(w_i\)。选出一个子序列 \(a_1\sim a_k\),满足 \(\forall\,i\in[1,k),a_i<a_{i+1}\) 且 \(s_{a_i}\) 是 \(s_{a_{i+1}}\) 的子串。求 \(\sum\limits_{i=1}^kw_{a_i}\) 的最大值。可以为空,此时权值为 \(\boldsymbol 0\)。

  • \(T\) 组数据,\(T\le 50\)。对于单组数据,满足 \(n\le 2\times 10^4\),\(\sum\limits_{i=1}^n|s_i|\le 3\times 10^5\)。

记 \(N=\sum\limits_{i=1}^n|s_i|\)。

考虑 dp。设 \(f_i\) 表示以 \(i\) 开头的最长子序列,则 \(f_i=\max\limits_{j\in(i,n]\land \,s_i\text{ is a substring of }s_j} f_j+w_i\)。

将所有串拼成一个大串 \(S\) 进行后缀排序。则 \(j\) 满足条件,当且仅当 \(s_j\) 中有一个后缀与 \(s_i\) 的最长公共前缀长度不少于 \(|s_j|\)。

这样的后缀排名形如一个区间 \([L,R]\)。考虑线段树维护。区间 \([l,r]\) 的信息为:当前包含排名为 \([l,r]\) 中的后缀的字符串中,\(f_j\) 的最大值。

那么转移就是区间最大值。可能会重复贡献一些 \(f_j\),但由于是取 \(\max\) 所以没关系。

转移完后在线段树上对 \(s_i\) 的所有后缀排名对应的位置进行单点修改。

时空复杂度均为 \(\mathcal{O}(N\log N)\)。可以把 \(\text{height}\) 数组用线段树维护然后线段树上二分得到排名区间,这样空间是线性。

AC Link / AC Code

标签:le,limits,后缀,线段,GRE,Words,区间,排名
From: https://www.cnblogs.com/MnZnOIerLzy/p/18064190

相关文章

  • PostgreSQL应该用哪个时区表示符?
    PG中国用哪个时区标识符?在linux中使用timedatectl查看时间,可以看到localtime中时区是CST。$timedatectlLocaltime:Mon2024-03-0418:19:54CSTUniversaltime:Mon2024-03-0410:19:54UTCRTCtime:Mon2024-03-0410:19:53Timezone:Asia/Shanghai(CST,+......
  • PostgreSQL的generate_series函数应用
    一、简介PostgreSQL中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据。二、语法函数参数类型返回类型描述generate_series(start,stop)int或bigintsetofint或setofbigint(与参数类型相同)生成一个数值序列,从start到stop,步进......
  • POSTGRESQL (PG) 6种索引类型介绍以及使用实例
    Postgresql中主要支持6种类型的索引:BTREE、HASH、GiST、SP-GiSP、GIN、BRIN。可以根据实际的应用场景选择合适的索引,BTREE、HASH是比较常用的索引。1.BTREE索引:CREATEINDEX默认使用BTREE索引,适合按照顺序存储的数据进行比较查询和范围查询,查询优化器会优先考虑使用BTREE索引,如......
  • Java连接PostgreSQL数据库测试
    importjava.sql.DriverManager;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.ResultSet;importjava.sql.Statement;publicclassPG{publicstaticvoidmain(String[]args){System.out.println("PostgreSQLJDBC......
  • nginx反向代理服务器实现postgreSQL
    可访问的地址:192.168.1.200:9856不可访问的地址:192.168.214.133:32222(pg库的地址)在192.168.1.200服务器上安装nginx,设置一个监听的端口(9856),将地址二192.168.214.133:32222映射到这个端口(版本要大于nginx1.9.xxx,stream和http是同级关系,在Navicat上通过连接主机-192.168.1......
  • Flink AggregatingState 实例
    FlinkAggregatingState实例AggregatingState介绍AggregatingState需要和AggregateFunction配合使用add()方法添加一个元素,触发AggregateFunction计算get()获取State的值需求:计算每个设备10秒内的平均温度importorg.apache.flink.api.common.eventtime.SerializableTimesta......
  • docker安装postgreSql
    拉取镜像控制台运行以下代码(如果需要指定版本,则将latest改为对应的版本号)dockerpullpostgres:latest创建容器dockerrun-it--namepostgresql--privileged-ePOSTGRES_PASSWORD=123456-p5432:5432-vC:\SolutionSpace\docker\postgresql:/var/lib/postgresql/data......
  • python-Grequests,一个好用的 requests库的异步版本!
    Grequests是什么?grequests是一个Python库,它是requests库的异步版本。它允许你同时发送多个HTTP请求,而不必等待每个请求依次响应。可以在等待服务器响应的同时执行其他任务,从而节省时间并提高效率。安装Grequestspipinstallgrequests使用示例一:批量获取网页假如有一个......
  • PostgreSQL 在使用连表语句时报错 ERROR: operator does not exist: bigint = charact
    背景在使用PostgreSQL数据库过程中,使用了连表语句如下所示,其中a表的order_no为bigint类型,b表的order_no为varchar类型select*fromtable_orderainnerjointable_order_itembona.order_no=b.order_no;遇到提示:ERROR:operatordoesnotexist:bigint=characterv......
  • posgre
    ==================selecttablename,casewhensubstring(tablename,5,1)='f'then'a'--(1)whensubstring(tablename,5,1)='p'then'b'--(2)else'c'endasflg......