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 ;
}

[Manacher+bit]Palindrome的更多相关文章

  1. Manacher算法 & Palindrome

    马拉车用于解决最长回文子串问题,重点是子串,而不是子序列,时间复杂度为O(n). 解释一下变量的意义: Len[i]数组去存第i个位置到mx位置的长度 id记录上一次操作的位置(这个操作可以看模板) ...

  2. 【学习笔记】字符串—马拉车(Manacher)

    [学习笔记]字符串-马拉车(Manacher) 一:[前言] 马拉车用于求解连续回文子串问题,效率极高. 其核心思想与 \(kmp\) 类似:继承. --引自 \(yyx\) 学姐 二:[算法原理] ...

  3. Codeforces Gym 100570 E. Palindrome Query Manacher

    E. Palindrome QueryTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100570/pro ...

  4. Palindrome(poj3974)(manacher算法)

    http://poj.org/problem?id=3974 Palindrome Time Limit: 15000MSMemory Limit: 65536K Total Submissions: ...

  5. Palindrome(Manacher)

    Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 6183   Accepted: 2270 Descr ...

  6. Palindrome(最长回文串manacher算法)O(n)

     Palindrome Time Limit:15000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  7. Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp

    题目链接: http://codeforces.com/problemset/problem/7/D D. Palindrome Degree time limit per test1 secondm ...

  8. hdu6230 Palindrome(manacher+树状数组)

    题目链接: Palindrome Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Other ...

  9. POJ3974:Palindrome(Manacher模板)

    Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 14021   Accepted: 5374 题目链接 ...

随机推荐

  1. windows下SecureCRT无法使用backspace(空格键)和上下左右键

    在使用SecureCRT登陆liunx(我的为CenterOS)系统,发现删除(backspace)键.和上下左右键不起作用,郁闷了很久没有找到解决办法, 今天终于看到了一篇有用的文章,在此记录一下! ...

  2. HDU - 1175 连连看 【DFS】【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路 这种题一想到就用搜索, 但是内存是32m 用 bfs 会不会MLE 没错 第一次 BFS的 ...

  3. Python3 函数 一

    什么是函数? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal ...

  4. 第一篇 css导入方式 及选择器

    一 推荐资料 推荐书籍 css Zen Garden 中文(css禅意花园) 二.css样式 1.css样式表特征 继承性  大多数css的样式规则可以被继承 层叠性 1)可以定义 多个样式 2)不冲 ...

  5. 斯坦福机器学习视频笔记 Week2 多元线性回归 Linear Regression with Multiple Variables

    相比于week1中讨论的单变量的线性回归,多元线性回归更具有一般性,应用范围也更大,更贴近实际. Multiple Features 上面就是接上次的例子,将房价预测问题进行扩充,添加多个特征(fea ...

  6. HDFS常见问题

    在HDFS里面,data node上的块大小默认是64MB(或者是128MB或256MB) 问题: 为什么64MB(或128MB或256MB)是最优选择? 为什么不能远少于64MB(或128MB或25 ...

  7. centos web+mysql服务器的安全

    今天闲来无事,拿来X-Scan-v3.3 来扫描自己的服务器,开放端口有22,80,443,3306:3306端口被扫出来,呵呵,那可不得了: 一,屏蔽扫描器扫出3306端口,因为web和数据库是在同 ...

  8. Shiro-自定义realm

    Shiro自定义 realm package com.zhen.realm; import org.apache.shiro.authc.AuthenticationException; import ...

  9. ajax如何处理返回的数据格式是xml的情况

    <!DOCTYPE html> <html> <head> <title>用户注册</title> <meta charset=&qu ...

  10. Web前端理论知识记录

      Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...