[BZOJ3238][Ahoi2013]差异
来源:互联网 发布:网站源代码怎么修改seo 编辑:程序博客网 时间:2024/06/05 03:28
原题地址
题目大意:
题目的关键在于求
AC code:
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;typedef long long ll;const ll N=500010;const ll LOGN=20;ll l,ans;ll lg2[N],sa[N],t[N],c[N],rk[N],r1[N],r2[N],h[N],hei[N];ll f[N][LOGN];char s[N];void build(){ for(ll i=0;i<l;i++) c[s[i]]=1; for(ll i=1;i<(1<<10);i++) c[i]+=c[i-1]; for(ll i=0;i<l;i++) rk[i]=c[s[i]]; for(ll i=1,j;rk[sa[l]]!=l;i<<=1){ for(j=0;j<l;j++) r1[j]=j+i<l?rk[j+i]:0; for(j=0;j<l;j++) c[j]=0; for(j=0;j<l;j++) c[r1[j]]++; for(j=1;j<l;j++) c[j]+=c[j-1]; for(j=0;j<l;j++) t[c[r1[j]]--]=j; for(j=0;j<l;j++) c[j]=0; for(j=0;j<l;j++) c[rk[j]]++; for(j=1;j<l;j++) c[j]+=c[j-1]; for(j=l;j>0;j--) sa[c[rk[t[j]]]--]=t[j]; for(r2[sa[1]]=1,j=2;j<=l;j++) r2[sa[j]]=r2[sa[j-1]]+(rk[sa[j]]!=rk[sa[j-1]]||r1[sa[j]]!=r1[sa[j-1]]); for(j=0;j<l;j++) rk[j]=r2[j]; } for(ll i=0,j=0;i<l;h[i]=j,j=j?j-1:0,i++){ for(;rk[i]!=1&&s[sa[rk[i]]+j]==s[sa[rk[i]-1]+j];j++) ; } for(ll i=0;i<l;i++) hei[rk[i]]=h[i]; for(ll i=1;i<=l;i++) f[i][0]=hei[i]; for(ll i=1,j;i<=lg2[l];i++){ for(j=1;j<=l;j++){ f[j][i]=f[j][i-1]; if(j+(1<<(i-1))<=l) f[j][i]=min(f[j][i],f[j+(1<<(i-1))][i-1]); } }}ll rmq(ll f[N][LOGN],ll L,ll R){ return min(f[L][lg2[R-L+1]],f[R-(1<<lg2[R-L+1])+1][lg2[R-L+1]]);}int main(){ scanf("%s",s); l=strlen(s); for(ll i=1;i<=l;i++) lg2[i]=(ll)log2(i); for(ll i=l;i>=2;i--) ans+=(i*(i-1)*3)>>1; build(); for(ll i=2;i<=l;i++){ ll L1=1,R1=i,L2=i,R2=l+1; while(L1+1!=R1){ ll M=(L1+R1)>>1; if(rmq(f,M,i-1)>hei[i]) R1=M; else L1=M; } while(L2+1!=R2){ ll M=(L2+R2)>>1; if(rmq(f,i,M)<hei[i]) R2=M; else L2=M; } ans-=(hei[i]*(i-R1+1)*(L2-i+1))<<1; } printf("%lld\n",ans); return 0;}
0 0
- [Ahoi2013]差异 bzoj3238
- 【AHOI2013】【BZOJ3238】差异
- [BZOJ3238][Ahoi2013]差异
- [BZOJ3238][Ahoi2013]差异
- bzoj3238: [Ahoi2013]差异
- 【AHOI2013】bzoj3238 差异
- 【bzoj3238】[Ahoi2013]差异
- 【BZOJ3238】【Ahoi2013】差异 后缀自动机
- [BZOJ3238] [AHOI2013] 差异 - 后缀自动机
- bzoj3238 [Ahoi2013]差异 后缀自动机
- 【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
- [BZOJ3238][Ahoi2013]差异 做题笔记
- 【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
- 【bzoj3238】【AHOI2013】【差异】【后缀数组+单调栈】
- 后缀数组+单调栈 【Ahoi2013】bzoj3238 差异
- [BZOJ3238][Ahoi2013][后缀自动机][树形DP]差异
- BZOJ3238: [Ahoi2013]差异(后缀数组)
- [BZOJ3238][Ahoi2013]差异(后缀自动机||后缀数组)
- CCF模拟题部分题目解题思路与AC代码
- Android中如何获取系统应用程序列表与AndroidManifest.xml信息
- 软件开发工具(六)--宏观总结
- httpd反向代理
- java环境变量
- [BZOJ3238][Ahoi2013]差异
- 编写android HAL代码
- UVA216 ——dfs
- Linux I2C设备驱动编写
- Java导论(一)
- 总结_高效能人士的七个习惯
- eightQueen1.0
- 数据库设计(4)-高级ER模型构建
- 第十章 方差分析