博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ4278】[ONTAK2015]Tasowanie 后缀数组
阅读量:5459 次
发布时间:2019-06-15

本文共 990 字,大约阅读时间需要 3 分钟。

【BZOJ4278】[ONTAK2015]Tasowanie

Description

给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T。

Input

第一行包含一个正整数n(1<=n<=200000),表示A串的长度。
第二行包含n个正整数,其中第i个数表示A[i](1<=A[i]<=1000)。
第三行包含一个正整数m(1<=m<=200000),表示B串的长度。
第四行包含m个正整数,其中第i个数表示B[i](1<=B[i]<=1000)。

Output

输出一行,包含n+m个正整数,即字典序最小的T串。

Sample Input

6
1 2 3 1 2 4
7
1 2 2 1 3 4 3

Sample Output

1 1 2 2 1 2 3 1 2 3 4 3 4
题解:后缀数组无脑码,将两个串连成一个,中间用极大值隔开,然后跑后缀数组,每次取两个串开头的比较排名就可以了。

 

#include 
#include
#include
using namespace std;const int maxn=400010;int N,M,n,m,maxx;int r[maxn],ra[maxn],rb[maxn],sa[maxn],st[maxn],rank[maxn];void work(){ int i,j,p,*x=ra,*y=rb; for(i=0;i
=0;i--) sa[--st[x[i]]]=i; for(j=p=1;p
<<=1,m=p) { for(i=n-j,p=0;i
=j) y[p++]=sa[i]-j; for(i=0;i
=0;i--) sa[--st[x[y[i]]]]=y[i]; for(swap(x,y),i=p=1,x[sa[0]]=0;i
rank[b]&&b

转载于:https://www.cnblogs.com/CQzhangyu/p/6272283.html

你可能感兴趣的文章
《余额宝技术架构及演进》读后感
查看>>
手机滑动应用
查看>>
Dispose() C# 优化内存
查看>>
堆排序
查看>>
线程池实现多线程
查看>>
js如何模拟multipart/form-data类型的请求
查看>>
Gibbs 采样定理的若干证明
查看>>
3. Longest Substring Without Repeating Characters
查看>>
织梦添加搜索功能
查看>>
JDK的安装和环境变量配置
查看>>
jmeter学习记录--05--Beanshell2
查看>>
【动态语言和静态语言】动态语言和静态语言的认识,定义
查看>>
如何实现Android欢迎页
查看>>
Java 解析chm文件实战(原创)
查看>>
(HttpMessageNotWritableException ) No converter found for return value of type xxxx
查看>>
个人工作总结18
查看>>
yui cookie Dynamically Change Text Size Using Javascript 动态设置字体大小,写入Cookie
查看>>
elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器
查看>>
Java 异常处理
查看>>
Sql中获取表结构(字段名称,类型,长度,说明)
查看>>