博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu-6230 2017CCPC-哈尔滨站 A.Palindrome Manacher 主席树
阅读量:7235 次
发布时间:2019-06-29

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

题意:给你一个字符串,问你满足s[i]=s[2n-i]=s[2n+i-2]的子串(这子串长度为3n-2)有多少个,原字符串长度<=5e5

题解:对于这种子串,其实要满足2个回文,跑过一次Manacher后,len[i]表示以i向两边扩展最远的回文串长度,

        那么对于答案,实际就是统计满足下列条件(i,j)的对数

        i  <= j

       j - i <= len[i]

       j - i <= len[j]

       移项就是

       i >= j -  len[j]

       j <= i + len[i]

       那么相当于,枚举i,询问(i,i+len[i])区间内,有多少个数(这里指权值 j - len[j])小于等于i

       就是问区间内小于某个数的个数,那就是主席树裸题(好像其他人都写的树状树状ORZ)

       

1 #include
2 #define N 500505 3 using namespace std; 4 int sum[N*25],rt[N*25],lc[N*25],rc[N*25]; 5 int a[N],b[N],len[N],p,node_cnt,cnt,value[N]; 6 char s[N]; 7 void build(int &t,int l, int r) 8 { 9 t=++node_cnt;10 sum[t]=0;11 if (l==r) return;12 int mid=(l+r)>>1;13 build(lc[t],l,mid);14 build(rc[t],mid+1,r);15 }16 int modify(int o,int l,int r)17 {18 int oo = ++node_cnt;19 lc[oo]=lc[o]; rc[oo]=rc[o]; sum[oo]=sum[o]+1;20 if (l==r) return oo;21 int mid=(l+r)>>1;22 if (p<=mid) lc[oo]=modify(lc[oo],l,mid);23 else rc[oo]=modify(rc[oo],mid+1,r);24 return oo;25 }26 int query(int u,int v,int l,int r,int k)27 {28 int ans,mid=((l+r)>>1);29 if (r<=k) return sum[v]-sum[u];30 if (l>k) return 0;31 ans=query(lc[u],lc[v],l,mid,k);32 if (mid
R) {pos=i;R=i+len[i];}43 }44 for(int i=1;i<=cnt;i++)45 {46 a[i]=i-len[i]+1;47 b[i]=a[i];48 }49 }50 int main() 51 {52 int k, n, q, nn, v, l, r, x,T;53 scanf("%d\n",&T);54 while (T--)55 {56 scanf("%s",s+1);57 cnt=strlen(s+1);58 manacher();59 sort(b+1,b+1+cnt);60 nn=unique(b+1,b+cnt+1)-b-1;61 node_cnt=0;62 build(rt[0],1,nn);63 for (int i=1;i<=cnt;i++)64 {65 p=lower_bound(b+1,b+nn+1,a[i])-b;66 rt[i]=modify(rt[i-1],1,nn);67 }68 long long ans=0;69 for (int i=1;i<=cnt;i++)70 {71 x=lower_bound(b+1,b+nn+1,i)-b;72 if (x==nn+1) x--;73 if (b[x]>i) x--;74 if(x==0) continue;75 if(min(len[i]+i-1,cnt)

 

转载于:https://www.cnblogs.com/qywhy/p/9749063.html

你可能感兴趣的文章
mysql如收集统计信息
查看>>
同步和异步消息机制
查看>>
java nio
查看>>
Win10中文语言包安装方法
查看>>
Spring.NET的AOP怎么玩
查看>>
asp.net core mvc实现伪静态功能asp.net core mvc实现伪静态功能
查看>>
DirectX11中Shader的封装
查看>>
编写一个程序统计输入字符串中:各个数字,空白字符,以及其他所有字符常出现的次数。...
查看>>
移动互联网时代,如何颠覆式协同工作
查看>>
背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意
查看>>
discuz X3全局变量$_G
查看>>
Linux中更改转移mysql数据库目录的步骤
查看>>
AngularJs-04-模拟登陆
查看>>
Ubuntu安装ping工具
查看>>
Keepalived单实例简单环境搭建
查看>>
Publication的 immediate_sync 属性
查看>>
屌丝Cent OS服务解密
查看>>
linux下查看和添加PATH环境变量
查看>>
docker swarm集群部署
查看>>
RMAN内部原理介绍
查看>>