工艺 bzoj-2882

题目大意:题目链接。

注释:略。


想法

跟bzoj1031差不多啊。

把串倍长后扫$sa$数组。

最后再统计答案即可。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 600050
using namespace std;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
struct Node {int num,id,v;
}a[N];
bool cmp_num(const Node &x,const Node &y) {return x.num<y.num;}
bool cmp_id(const Node &x,const Node &y) {return x.id<y.id;}
int n,wa[N],wb[N],Ws[N],wv[N],r[N],sa[N],rank[N],height[N],m,turn[N];
void build_sa()
{m=n;int i,j,p,*x=wa,*y=wb,*t;for(i=0;i<m;i++) Ws[i]=0;for(i=0;i<n;i++) Ws[x[i]=r[i]]++;for(i=1;i<m;i++) Ws[i]+=Ws[i-1];for(i=n-1;~i;i--) sa[--Ws[x[i]]]=i;for(j=p=1;p<n;j<<=1,m=p){for(p=0,i=n-j;i<n;i++) y[p++]=i;for(i=0;i<n;i++) if(sa[i]-j>=0) y[p++]=sa[i]-j;for(i=0;i<n;i++) wv[i]=x[y[i]];for(i=0;i<m;i++) Ws[i]=0;for(i=0;i<n;i++) Ws[wv[i]]++;for(i=1;i<m;i++) Ws[i]+=Ws[i-1];for(i=n-1;~i;i--) sa[--Ws[wv[i]]]=y[i];for(t=x,x=y,y=t,x[sa[0]]=0,p=i=1;i<n;i++){if(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j]) x[sa[i]]=p-1;else x[sa[i]]=p++;}}
}
int main()
{int i;n=rd(); for(i=1;i<=n;i++) a[i].num=rd(),a[i].id=i;sort(a+1,a+n+1,cmp_num);int j=0; a[0].num=a[1].num-1;for(i=1;i<=n;i++){if(a[i].num!=a[i-1].num) j++;a[i].v=j; turn[j]=a[i].num;}sort(a+1,a+n+1,cmp_id);for(i=0;i<n;i++) r[i]=r[i+n]=a[i+1].v;n<<=1; r[n++]=0;build_sa();i=0; while(sa[i]>n/2) i++;for(j=sa[i];j<sa[i]+n/2;j++) printf("%d ",turn[r[j]]); puts("");return 0;
}

小结:后缀数组有很多妙用啊。

转载于:https://www.cnblogs.com/ShuraK/p/10108413.html

[bzoj2882]工艺_后缀数组相关推荐

  1. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  2. 后缀数组 java实现_后缀数组模板 - java开发指南博客 【转载】 - ITeye博客

    //后缀数组模板 int wa[maxn],wb[maxn],wv[maxn],ws[maxn];//这些都是需要用到的中间变量 int cmp(int *r,int a,int b,int l) { ...

  3. SPOJ 7258 SUBLEX 后缀数组_二分答案_前缀和

    SPOJ 7258 SUBLEX 后缀数组_二分答案_前缀和 Code: #include <cstdio> #include <algorithm> #include < ...

  4. c++ 字符串数组长度排序_数组 | 后缀数组的求法及应用

    作者:Andy__lee 链接:https://blog.nowcoder.net/n/6b4a93e186ed4a358321de6a7c3b4f19 来源:牛客网 定义 维基百科 - 后缀数组 让 ...

  5. bzoj5108 数据_【Luogu5108】仰望半月的夜空(后缀数组)

    [Luogu5108]仰望半月的夜空(后缀数组) 题面 题解 实名举报这题在比赛之前还不是这个样子的,还被我用SAM给水过去了 很明显求出$SA$之后就是按照$SA$的顺序从前往后考虑每一个长度,这样 ...

  6. 后缀数组 + Hash + 二分 or Hash + 二分 + 双指针 求 LCP ---- 2017icpc 青岛 J Suffix (假题!!)

    题目链接 题目大意: 就是给你n个串每个串取一个后缀,要求把串拼起来要求字典序最小!! sum_length_of_n≤5e5sum\_length\_of\_n\leq 5e5sum_length_ ...

  7. hdu4416 Good Article Good sentence (后缀数组)

    题意:问a串中有多少种字符串集合B中没有的连续子串. a的长度10^5,B中的总长度为不超过10^5. 解法:后缀数组题目:后缀数组能够非常easy算出来一个串中有多少种子串. 把a和B集合连起来.求 ...

  8. 【BZOJ】1031: [JSOI2007]字符加密Cipher(后缀数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1031 很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可. 然后换了下模板 ...

  9. 转一个后缀数组的简单总结:

    后缀数组就是将字符串所有后缀排序后的数组,设字符串为S,令后缀Suffix(i)表示S[i..len(S)].用两个数组记录所有后缀的排序结果: Rank[i]记录Suffix(i)排序后的序号,即S ...

最新文章

  1. matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
  2. HTTP-GET, HTTP-POST and SOAP的比较
  3. 使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试
  4. html页面授权码,spring boot 2.0 整合 oauth2 authorization code授权码模式
  5. php mysql导入excel_如何从PHP导入Excel文件到mysql数据库
  6. 解决Junit问题的方法
  7. 从零学ELK系列(二):VMware安装Centos(超详细图文教程)
  8. 3.1等待和通知API(Wait-and-Notify API Tour)
  9. SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信
  10. RTE 2020第二批嘉宾公布 教育+社交+IoT行业大咖参会
  11. 【程序35】 ArrayChange.java 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
  12. 形容等待时间长的句子_形容等待很久的句子
  13. 在计算机上格式u盘启动,请问U盘制作成启动盘后插电脑上显示0字节,打不开也无法格式化,提示磁盘写有保护怎么回事?...
  14. SAP中利用标准成本报表计算成品人工成本及组成实例
  15. matlab 卡丹 公式,卡丹公式是什么?请写出来,并用例题加以解释,
  16. zemax中如何快速查看波像差
  17. 看完知乎上500条答案,我为大家整理了这21个B站学习类UP主
  18. java线程 睡眠_java如何编写线程睡眠工具类包括随机睡眠时长
  19. Behance上值得借鉴的设计风格
  20. 你也能轻松破解CNKI 密码

热门文章

  1. C语言实现录入学生信息并按分数排序输出
  2. C语言核心技术——函数
  3. oracle 数据语句优化,oracle 查询语句优化录
  4. mysql 查看最近的语句_查看MySQL最近执行的语句
  5. 超实用的网络故障排障指南
  6. 应用编排与管理:核心原理
  7. CNCF 公布 2020 年 TOC 选举结果 | 云原生生态周报 Vol. 36
  8. 广东汕尾2021年高考成绩查询,广东汕尾2021年高考英语听说考试成绩查询入口
  9. html 5 gif手机版,动画GIF在HTML5画布
  10. qt5 linux 控制台 乱码,qt5.12 解决显示中文乱码问题