题意:给定字符串char[],以及Q个操作,操作有三种:

1:pos,chr:把pos位置的字符改为chr

2:pos:问以pos为中心的回文串长度为多长。

3:pos:问以pos,pos+1为中心的回文串长度为多长。

思路:用hash表示一段字符串或者连续子串。我们用BIT记录hash前缀和,那么也可以用BIT修改前缀和。然后blabla,乱搞就行了。

当然为了保险,最好用双hash。

(此题暴力也可以过!

暴力代码:3962ms

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
char c[maxn],t;
int main()
{
int N,Q,opt,x;
scanf("%s%d",c+,&Q); N=strlen(c+);
while(Q--){
scanf("%d%d",&opt,&x);
if(opt==){
scanf(" %c",&t); c[x]=t;
}
else if(opt==){
int i=x,j=x;
while(i->=&&j+<=N&&c[i-]==c[j+]) i--,j++;
printf("%d\n",j-i+);
}
else {
if(c[x]!=c[x+]) { puts("-1"); continue;}
int i=x,j=x+;
while(i->=&&j+<=N&&c[i-]==c[j+]) i--,j++;
printf("%d\n",j-i+);
}
}
return ;
}

hash+BIT+二分:93ms(目前排第一?

#include<bits/stdc++.h>
#define uint unsigned int
using namespace std;
const int maxn=;
const uint seed=;
char c[maxn]; uint sum[maxn][],p[maxn]; int N;
uint query(int x,int opt){
uint res=; while(x) {
res+=sum[x][opt]; x-=(-x)&x;
} return res;
}
bool check(int L,int R)
{
if(L<||R>N) return false;
uint h1=(query(R,)-query(L-,))*p[L-];
uint h2=(query(R,)-query(L-,))*p[N-R];
if(h1==h2) return true; return false;
}
int main()
{
int Q,i,j;
scanf("%s%d",c+,&Q); N=strlen(c+);
p[]=;
for(i=;i<=N;i++) p[i]=p[i-]*seed;
for(i=;i<=N;i++){
for(j=i;j<=N;j+=(-j)&j) sum[j][]+=p[N-i]*c[i];
for(j=i;j<=N;j+=(-j)&j) sum[j][]+=p[i-]*c[i];
}
int opt,x,L,R,Mid,ans; char chr;
while(Q--){
scanf("%d%d",&opt,&x);
if(opt==){
scanf(" %c",&chr);
for(j=x;j<=N;j+=(-j)&j) sum[j][]+=p[N-x]*(chr-c[x]);
for(j=x;j<=N;j+=(-j)&j) sum[j][]+=p[x-]*(chr-c[x]);
c[x]=chr;
}
else if(opt==){
L=; R=N; ans=;
while(L<=R){
Mid=(L+R)>>;
if(check(x-Mid,x+Mid)) ans=Mid,L=Mid+;
else R=Mid-;
}
printf("%d\n",ans*+);
}
else{
L=; R=N; ans=-;
while(L<=R){
Mid=(L+R)>>;
if(check(x-Mid,x++Mid)) ans=Mid,L=Mid+;
else R=Mid-;
}
printf("%d\n",ans==-?-:ans*+);
}
}
return ;
}

Gym - 100570E:Palindrome Query (hash+BIT+二分维护回文串长度)的更多相关文章

  1. Gym 100570E : Palindrome Query

    De Prezer loves palindrome strings. A string s1s2...sn is palindrome if and only if it is equal to i ...

  2. leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】

    题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...

  3. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...

  4. [CSP-S模拟测试]:回文串(hash+二分)

    题目描述 $ASDFZ$的机房中不仅有红太阳,还有蓝太阳和原谅色太阳.有一天,太阳们来到机房,发现桌上有不知道哪个蒟蒻放上的问题:令$F(A,B)$表示选择一个串$A$的非空前缀$S$和串$B$的非空 ...

  5. LOJ 2452 对称 Antisymmetry——用hash求回文串数

    概念 用hash求最长回文串/回文串数 首先,易知,回文串具有单调性. 如果字符串 $s[l...r]$ 为回文串串,那么 $s[x...y]$($l < x, y < r$ 且 $|l- ...

  6. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  7. bzoj 2124 等差子序列 树状数组维护hash+回文串

    等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 1919  Solved: 713[Submit][Status][Discuss] Desc ...

  8. BZOJ4755 JSOI2016扭动的回文串(二分答案+哈希)

    显然答案应该是由单串以某位置为中心的极长回文串继续在另一个串里拓展得到的.枚举中间位置二分答案,哈希判断即可.注意考虑清楚怎么处理偶回文,比如像manacher一样加分隔符. #include< ...

  9. CF452F等差子序列 & 线段树+hash查询区间是否为回文串

    记录一下一个新学的线段树基础trick(真就小学生trick呗) 给你一个1到n的排列,你需要判断该排列内部是否存在一个3个元素的子序列(可以不连续),使得这个子序列是等差序列.\(n\) <= ...

随机推荐

  1. Xcode8:"subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0" 的警告

    运行xcode8遇到这个警告: subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_lev ...

  2. Muduo网络库源代码分析(四)EventLoopThread和EventLoopThreadPool的封装

    muduo的并发模型为one loop per thread+ threadpool.为了方便使用,muduo封装了EventLoop和Thread为EventLoopThread,为了方便使用线程池 ...

  3. [Sdoi2013]随机数生成器(BSGS)

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  4. poj2485

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27912   Accepted: 12734 Descri ...

  5. 【BZOJ3112】[Zjoi2013]防守战线 单纯形法

    [BZOJ3112][Zjoi2013]防守战线 题解:依旧是转化成对偶问题,然后敲板子就行了~ 建完表后发现跟志愿者招募的表正好是相反的,感觉很神奇~ #include <cstdio> ...

  6. 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题

    [BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...

  7. Frobenius Norm

    http://mathworld.wolfram.com/FrobeniusNorm.html

  8. linux c编程:信号(一)

    信号是软件中断,很多比较重要的应用程序都需要处理信号.并且信号提供了一种处理异步事件的方法.如终端用户键入中断键,会通过信号机制停止一个程序,或及早终止管道中的下一个程序 很多条件都可以产生信号,比如 ...

  9. Apache Shiro 使用手册(一)Shiro架构介绍(转发:http://kdboy.iteye.com/blog/1154644#bc2399255)

    一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”: 授权 - 访问控制: 密码加密 ...

  10. rails 注释

    view -# js.erb <%# xxxx %> 单行注释