博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Vjudge】P1989Subpalindromes(线段树)
阅读量:4607 次
发布时间:2019-06-09

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

  

  水题一道,用线段树维护哈希值,脑补一下加减乱搞搞……注意细节就过了

  一定注意细节……

#include
#include
#include
#include
#include
#define maxn 100050#define base 163#define left (rt<<1)#define right (rt<<1|1)#define mid ((l+r)>>1)#define lson l,mid,left#define rson mid+1,r,rightusing namespace std;unsigned long long d[maxn*5];unsigned long long w[maxn*5];unsigned long long bs[maxn];char q[maxn];inline int count(char c){ return c-'a'+1; }inline void pushup(int rt,int m){ d[rt]=d[left]*bs[m>>1]+d[right]; w[rt]=w[right]*bs[m-(m>>1)]+w[left];}void build(int l,int r,int rt){ if(l==r){ d[rt]=w[rt]=count(q[l]); return; } build(lson); build(rson); pushup(rt,r-l+1);}unsigned long long queryfro(int from,int to,int l,int r,int rt){ if(from<=l&&to>=r) return d[rt]; unsigned long long ans=0; int len=0; if(to>mid){ len=min(to,r)-mid; ans=queryfro(from,to,rson); } if(from<=mid) ans+=queryfro(from,to,lson)*bs[len]; return ans;}unsigned long long querysub(int from,int to,int l,int r,int rt){ if(from<=l&&to>=r) return w[rt]; unsigned long long ans=0; int len=0; if(from<=mid){ len=mid-max(from,l)+1; ans=querysub(from,to,lson); } if(to>mid) ans+=querysub(from,to,rson)*bs[len]; return ans;}void update(int o,char c,int l,int r,int rt){ if(l==r){ d[rt]=w[rt]=count(c); return; } if(o<=mid) update(o,c,lson); else update(o,c,rson); pushup(rt,r-l+1);}int main(){ scanf("%s",q+1); int n=strlen(q+1),m; scanf("%d",&m); bs[0]=1; for(int i=1;i<=n;++i) bs[i]=bs[i-1]*base; build(1,n,1); for(int i=1;i<=m;++i){ char c[15]; int x,y;char o[10]; scanf("%s%d",c,&x); if(c[0]=='p'){ scanf("%d",&y); if(queryfro(x,y,1,n,1)==querysub(x,y,1,n,1)) printf("Yes\n"); else printf("No\n"); } else{ scanf("%s",o); update(x,o[0],1,n,1); } } return 0;}/*abcda5palindrome? 1 5palindrome? 1 1change 4 bpalindrome? 1 5palindrome? 2 4*/

 

转载于:https://www.cnblogs.com/cellular-automaton/p/8333813.html

你可能感兴趣的文章
IIS处理并发请求时出现的问题
查看>>
优先队列小结
查看>>
线程安全与可重入函数之间的区别与联系
查看>>
{Nodejs} request URL 中文乱码
查看>>
异常及日志使用与项目打包
查看>>
努力,时间,坚持,自律
查看>>
Hadoop2.6.0 动态增加节点
查看>>
图论的一些概念、定理
查看>>
WebView用法
查看>>
Lecture 3: Planning by Dynamic Programming
查看>>
用flash代替图片IMG,设置动态效果链接
查看>>
关于JS的随笔(二)
查看>>
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
查看>>
webbug3.0菜鸟笔记1
查看>>
数组相关函数
查看>>
Python 和其他编程语言数据类型的比较
查看>>
T2695 桶哥的问题——送桶 题解
查看>>
HTML5 表单
查看>>
Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...
查看>>
关于微信公众平台测试号配置失败的问题
查看>>