【BZOJ4278】[ONTAK2015]Tasowanie 后缀数组
【BZOJ4278】[ONTAK2015]Tasowanie
Description
Input
Output
Sample Input
1 2 3 1 2 4
7
1 2 2 1 3 4 3
Sample Output
#include <cstdio>
#include <cstring>
#include <iostream>
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<n;i++) st[x[i]=r[i]]++;
for(i=1;i<m;i++) st[i]+=st[i-1];
for(i=n-1;i>=0;i--) sa[--st[x[i]]]=i;
for(j=p=1;p<n;j<<=1,m=p)
{
for(i=n-j,p=0;i<n;i++) y[p++]=i;
for(i=0;i<n;i++) if(sa[i]>=j) y[p++]=sa[i]-j;
for(i=0;i<m;i++) st[i]=0;
for(i=0;i<n;i++) st[x[y[i]]]++;
for(i=1;i<m;i++) st[i]+=st[i-1];
for(i=n-1;i>=0;i--) sa[--st[x[y[i]]]]=y[i];
for(swap(x,y),i=p=1,x[sa[0]]=0;i<n;i++)
x[sa[i]]=(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j])?p-1:p++;
}
for(i=0;i<n;i++) rank[sa[i]]=i;
}
int main()
{
int i;
scanf("%d",&N);
for(i=0;i<N;i++) scanf("%d",&r[i]),m=max(m,r[i]);
scanf("%d",&M);
for(i=0;i<M;i++) scanf("%d",&r[N+i+1]),m=max(m,r[N+i+1]);
r[N]=m+1,n=N+M+2,m+=2;
work();
int a=0,b=N+1;
for(i=0;i<N+M;i++)
{
if(rank[a]>rank[b]&&b<N+M+1)
printf("%d ",r[b++]);
else
printf("%d ",r[a++]);
}
printf("\n");
return 0;
}
【BZOJ4278】[ONTAK2015]Tasowanie 后缀数组的更多相关文章
- BZOJ4278 [ONTAK2015]Tasowanie[后缀数组+贪心]
题目 求两数组归并后的数组最小字典序排列. 嘛,可能本人在贪心这块还是太弱了(或者说什么都弱),如果不知道是字符串题估计也想不起来用sa. 显然看得出归并时字典序小的那个数组先往里面加,这就是要比较两 ...
- [bzoj4278][ONTAK2015]Tasowanie_后缀数组_贪心
Tasowanie bzoj-4278 ONTAK-2015 题目大意:给定两个字符串,求两个字符串二路归并之后生成的字典序最小的字符串是什么. 注释:$1\le len_1,len_2\le 2\c ...
- 【BZOJ-4278】Tasowanie 后缀数组 + 归并
4278: [ONTAK2015]Tasowanie Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 164 Solved: 80[Submit][S ...
- BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 居然把后缀数组写成n^2的..我真厉害.. 想了无数种方法,最后发现就是 ...
- BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组 + 贪心 + 细节
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin ...
- BZOJ 4278: [ONTAK2015]Tasowanie (后缀数组 / 二分+hash)
直接归并,然后如果哪边的后缀字典序比较小就去哪边,然后就可以后缀数组 博客传送门- 但是本蒟蒻不会后缀数组 Upd:Upd:Upd:现在会了233.一道差不多的题:BZOJ 1692: [Usaco2 ...
- bzoj 4278 [ONTAK2015]Tasowanie——后缀数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4278 因为每次要放后缀较小的那个,所以把两个序列放在一起排序吧.改一改模板. 其实要改的地方 ...
- BZOJ_4278_[ONTAK2015]Tasowanie_后缀数组
BZOJ_4278_[ONTAK2015]Tasowanie_后缀数组 Description 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T. Input ...
- bzoj 4278 Tasowanie 后缀数组+贪心
题目大意 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T.\(len \leq 200000\) 题解 我们从归并排序的角度去想,每次把两者之一较小的取出来 ...
随机推荐
- iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)
一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...
- 封装自己的yQuery
function myAddEvent(obj, sEv, fn) { if (obj.attachEvent) { obj.attachEvent('on' + sEv, fn) } else { ...
- jquery动态分页
最近一直研究jquery的分页效果,刚刚弄好了一个,拿出来与大家分享.分页效果与时光网的差不多. 网址:http://www.mtime.com/movie/news/all/ 先在aspx页面放置一 ...
- OSX下git diff/merge 可视化工具 P4Merge 环境配置步骤
先下载 step1:首先,把要运行的命令放入外部包装脚本中,创建一个merge包装脚本,名字叫做extMerge,让它带参数调用P4Merge. $ cat >> /usr/local/b ...
- 关于Cocos2d-x中使用完Blink动作后精灵突然消失的问题的解决
精灵使用Blink 执行完动作之后,消失不见了,原因是闪烁的过程中精灵刚好到空纹理(透明)的那部分,这时候用户通过某种操作中断闪烁动作,导致下个状态的时候,精灵依然停留在空纹理的状态.所以最好在精灵执 ...
- 记录一下我的GDB配置
一:为了更好的在GDB中显示STL容器.我们首先要下载一个python脚本 PS:要确定你所安装的GDB能够运行python脚本 cd ~ mkdir .gdb cd .gdb svn co svn: ...
- Swift coreAnimation 加计时器写的游戏《飞机大战》
近期在学习swift的动画和图层.就用现学的东西写了个游戏,基本思想 基本功能都实现了.图片都是在网上找得.希望能帮助大家更好的理解动画和图层. 声明下,我是刚開始学习的人,代码写的不好.大家应该都能 ...
- Ext3.4--Gridpanel
Ext.onReady(function () { var sm = new Ext.grid.RowSelectionModel({singleSelect:true})//设置单选 //var s ...
- ionic调用数据接口(post、解决 payload 问题)
$http({method:'POST', url:apiUrl, headers:{'Content-Type': 'application/x-www-form-urlencoded; chars ...
- 解决Bootstrap布局注册表单input标签前增加必填项*提示与input框不在同一行问题
注册表单部分代码如下: <form id="registForm" class="form-horizontal" action="${page ...