https://nanti.jisuanke.com/t/15428

题目大意:离散表示的字符串,求其最长回文串长度。

解题关键:若只用Manacher算法,在统计sum时会超时,所以加一个树状数组来维护前n项和,即可AC。

  注意进行Manacher时,i是从1开始的,不要小也不要大。

n天后更新:以前一直没搞清离线与动态维护的区别,今天终于理解了,此题可以开始直接离线求前n项和,因为以后不再改变,所以此题不需要bit维护。直接用一个数组统计一下前n项和即可。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
ll num;
char ch;
}s[];
ll p[],sum[],bit[];
ll t,n,a,k,id,maxlen,tt;
ll read(ll i){
ll res=;
while(i){
res+=bit[i];
i-=i&-i;
}
return res;
}
void add1(ll i,ll x){
while(i<){
bit[i]+=x;
i+=i&-i;
}
}
int main(){
scanf("%lld",&t);
while(t--){
memset(p,,sizeof p);
memset(bit,,sizeof bit);
memset(s,,sizeof s);
memset(sum,,sizeof sum);
scanf("%lld",&n);
k=;
for(int i=;i<n;i++){
k++;
//cin>>s[k].num>>s[k].ch;
scanf("%lld %c",&s[k].num,&s[k].ch);
tt=s[k].num;
if(s[k].ch==s[k-].ch){
s[k-].num+=s[k].num;
k--;
}
add1(k,tt);
}
id=,maxlen=;
s[].ch='*',s[k+].ch='#';
for(int i=;i<=k;i++){
if(p[id]+id>i) p[i]=min(p[*id-i],p[id]+id-i);
else p[i]=;
while(s[i-p[i]].ch==s[i+p[i]].ch&&s[i-p[i]].num==s[i+p[i]].num)++p[i];
if(p[i]+i>p[id]+id) id=i;
sum[i]=read(i+p[i]-)-read(i-p[i]);
if(s[i-p[i]].ch==s[i+p[i]].ch) sum[i]+=*min(s[i-p[i]].num,s[i+p[i]].num);
maxlen=max(maxlen,sum[i]);
}
printf("%lld\n",maxlen);
}
return ;
}

最新文章

  1. js 的点击事件
  2. mysql可以用这种方式&lt;&lt;! 输入内容 ! 做成脚本
  3. 编译器 expected unqualified-id before numeric constant 错误
  4. [转载] linux下打开windows txt文件中文乱码问题
  5. jQuery选择器之全面总结
  6. javascript-实现日期大写
  7. hdoj 1342 Lotto【dfs】
  8. Myeclipse2013 SVN安装方法
  9. Javscript中的null和undefined
  10. git 使用过程(三、文件的添加 修改)
  11. 单文件文件上传到服务器(HTML5+js+Java)
  12. mac链接linux终端,shell脚本发布代码
  13. C++Primer学习——函数
  14. 【一天一道LeetCode】#111. Minimum Depth of Binary Tree
  15. OutOfMemoryError 到底能不能被捕获?
  16. 序列化serialize与反序列化unserialize
  17. [Linux性能调优] 磁盘I/O队列调度策略
  18. Learning-Python【0】:Windows环境下Python2和Python3的安装
  19. P1272 重建道路
  20. idea 提交代码时提示 please tell me who you are .......

热门文章

  1. Gem简介
  2. 怎么在js里写html
  3. poj 1028 Web Navigation 【模拟题】
  4. HTML入门学习笔记
  5. 大话设计模式--备忘录 Memento -- C++实现实例
  6. Spring Boot- 设置拦截打印日志
  7. 一个很有参考意义的unity博客
  8. javaScript-进阶篇(三)
  9. docker 基本概念
  10. codeforces 615E Hexagons (二分+找规律)