BZOJ 2882: 工艺 (SA/SAM/最小表示法)
2024-09-05 09:54:35
我写的O(nlogn)O(nlogn)O(nlogn)的SA 8000ms
被
O(n)O(n)O(n)的SAM 2800ms
和
O(n)O(n)O(n)的最小表示法 500ms
头都锤爆…
CODE
贴上大常数选手的代码
#include<bits/stdc++.h>
using namespace std;
char cb[1<<15],*cs=cb,*ct=cb;
#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<15,stdin),cs==ct)?0:*cs++)
template<class T>inline void read(T &res) {
char ch; int flg = 1; while(!isdigit(ch=getchar()))if(ch=='-')flg=-flg;
for(res=ch-'0';isdigit(ch=getchar());res=res*10+ch-'0'); res*=flg;
}
const int MAXN = 600005;
int s[MAXN];
int x[MAXN], y[MAXN], c[MAXN], rk[MAXN], sa[MAXN];
inline void Get_Sa(int n, int m) {
for(int i = 1; i <= m; ++i) c[i] = 0;
for(int i = 1; i <= n; ++i) ++c[x[i]=s[i]];
for(int i = 2; i <= m; ++i) c[i] += c[i-1];
for(int i = n; i >= 1; --i) sa[c[x[i]]--] = i;
for(int k = 1; k <= n; k<<=1) {
int p = 0;
for(int i = n-k+1; i <= n; ++i) y[++p] = i;
for(int i = 1; i <= n; ++i) if(sa[i]>k) y[++p] = sa[i]-k;
for(int i = 1; i <= m; ++i) c[i] = 0;
for(int i = 1; i <= n; ++i) ++c[x[i]];
for(int i = 2; i <= m; ++i) c[i] += c[i-1];
for(int i = n; i >= 1; --i) sa[c[x[y[i]]]--] = y[i];
swap(x, y);
x[sa[1]] = p = 1;
for(int i = 2; i <= n; ++i)
x[sa[i]] = (y[sa[i]] == y[sa[i-1]] && y[sa[i]+k] == y[sa[i-1]+k]) ? p : ++p;
if((m=p) == n) break;
}
for(int i = 1; i <= n; ++i) rk[sa[i]] = i;
}
int n, b[MAXN], tot;
int main() {
read(n);
for(int i = 1; i <= n; ++i)
read(s[i]), b[++tot] = s[i];
sort(b + 1, b + tot + 1); tot = unique(b + 1, b + tot + 1) - b - 1;
for(int i = 1; i <= n; ++i)
s[i] = s[n+i] = lower_bound(b + 1, b + tot + 1, s[i]) - b;
Get_Sa(n<<1, tot);
int S;
for(int i = 1; i <= n+1; ++i)
if(sa[i] <= n) { S = sa[i]; break; }
for(int i = 0; i < n; ++i)
printf("%d ", b[s[S+i]]);
}
最新文章
- What is a RaycastHit normal?
- [ActionScript 3.0] 通过内联函数对addFrameScript方法传递参数
- 完美且精准的 IE10- 版本检测。
- PHP判断用户操作系统(Android,ipad,iphone,windows)
- 《Head First设计模式(中文版)》
- poj2193
- MVC+jquery+AJAX的几种方式
- 东秦C#课设002-简单的文本编辑器
- WebForm和MVC中都可以使用的路由
- Bootstrap 模态框(Modal)插件id冲突
- 错误模块名称: KERNELBASE.dll错误
- WebService的讲解 和 CXF 的初步使用
- JavaScript Dom0 Dom1
- 关于lampp中的proftpd的一些使用
- sql语句查询月份的数据
- BZOJ2800 [Poi2012]Leveling Ground 【扩展欧几里得 + 三分 + 堆】
- Java从零开始学三(public class和class)
- JSP开发中对jstl的引用方式(标签库引用)
- php实现一个简单的购物网站
- Dynamics CRM 2011 权限管理
热门文章
- hdoj1520(入门树形dp)
- 2019牛客暑期多校训练营(第八场)-A All-one Matrices (单调栈+前缀和)
- java 基础(一)-实验楼
- # Python 3 &; 爬虫一些记录
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
- Elastic Search中Document的CRUD操作
- Redis 键空间事件通知
- Jmeter之正则表达式取样器~案例详解
- Java 反射理解(三)-- Java获取方法信息
- asp.net 8 Request,Response,Server