你有一个字符串S,最开始为空,要求支持两种操作

在S后面加入字符c

删除S最后一个字符

每次操作询问S有多少个两两不同子串

应该本来应该用SAM+Trie离线做的,然而为了练一下后缀平衡树就写了

其实也很好写,用哈希比较一下就好了,可以用set实现,开一个数组存每个后缀对应的节点就好

求height也可以用哈希

#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<set>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
char s[100010]; int n=0;
LL h[100010],bas[100010]={1};
struct suffix{ int x; };
inline LL gH(int l,int r){ return h[r]-h[l-1]*bas[r-l+1]; }
inline int lcp(int x,int y){if(x==y) return 0; int l=-1,r=min(x,y)-1;for(int m;l<r;){m=l+r+1>>1;if(gH(x-m,x)==gH(y-m,y)) l=m;else r=m-1;}return l+1;
}
inline bool operator< (suffix a,suffix b){int c=lcp(a.x,b.x); return s[a.x-c]<s[b.x-c];
}
multiset<suffix> w;
multiset<suffix>::iterator c[100010],p,q;
int main(){int ans=0;for(int i=1;i<=100000;++i) bas[i]=bas[i-1]*27;for(char o;;){o=getchar();if(o=='-'){p=q=c[n]; ++p; --q;ans-=n-lcp(p->x,n)-lcp(n,q->x)+(p->x==n || q->x==n?0:lcp(p->x,q->x));w.erase(c[n--]); }else if(o>='a' && o<='z'){s[++n]=o;  h[n]=h[n-1]*27+o-'a';p=q=c[n]=w.insert((suffix){n}); ++p; --q; ans+=n-lcp(p->x,n)-lcp(n,q->x)+(p->x==n || q->x==n?0:lcp(p->x,q->x));} else break;printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/Extended-Ash/p/8312595.html

Jzoj4384 Hashit相关推荐

  1. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set

    题目描述 你有一个字符串S,一开始为空串,要求支持两种操作 在S后面加入字母C 删除S最后一个字母 问每次操作后S有多少个两两不同的连续子串 输入 一行一个字符串Q,表示对S的操作 如果第i个字母是小 ...

  2. BZOJ5084: hashit

    后缀自动机 题目传送门 询问答案的话直接算就好了. 撤销的话记录一个指针数组aaa指向每次插入后改变的节点,另开一个b" role="presentation" styl ...

  3. Open source robotics toolkits: use virtual arenas to test your robotics algorithms

    转自:http://www.ibm.com/developerworks/linux/library/l-robotools/?ca=dgr-lnxw09OSRoboticToolkits Open ...

  4. 为什么同事写的代码那么优雅~

    大家好,我是若川,诚邀你进群交流学习.今天分享一篇相对轻松的代码简洁之道.学习源码系列.面试.年度总结.JS基础系列 内容出自<代码整洁之道>.Alex Kondov[1]的博文tao-o ...

  5. Egret中使用P2物理引擎

    游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎.  来自瑞典斯德哥尔 ...

  6. HDOJ1800 Flying to the Mars【Hash】

    题目大意: 8888年,地球被PPF王国统治了.由于人口增长,PPF需要为新生儿找寻更多的陆地.最后,PPF决定攻击通知Mars火星的Kscinow.问题来了,怎样让士兵到火星上去呢?PPF召集士兵征 ...

  7. JavaScript 代码简洁之道

    测试代码质量的唯一方式:别人看你代码时说 f * k 的次数. 代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好基础. 本文并不是代码风格指南,而是关于代码的可读 ...

  8. 暑假集训 ---- 字符串2 (SAM专题)

    P1368 工艺 把串插入 S A M SAM SAM 插两次,然后贪心找最小字典序即可 [AHOI2013]差异 两个串的最长公共后缀就是后缀自动机上 lca 的长度 于是把两个串反过来,对于每一个 ...

  9. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  10. 前端开发规范:JavaScript 规范

    JavaScript 风格指南 变量 变量声明 标准变量统一使用小驼峰,如 userInfo,activeIndex 常量全大写,用下划线连接,如 BASE_URL,DOMAIN 构造函数,大写第一个 ...

最新文章

  1. DNF登录器显示WIN无法访问指定设备_快速修复无法访问的u盘,不需要工具
  2. java反射的性能_java反射的性能问题
  3. 华为工程师SRECon Asia见闻:聚焦可靠性、资源优化及性能提升
  4. 虚拟话安全:4个基本点
  5. Dragon Quest VIII 流程攻略(繁体中文完结版)
  6. Java 并发:Executor ExecutorService ThreadPoolExecutor
  7. 存储过程Procedure
  8. 结对项目 - 词频统计
  9. 当Node.js遇见Docker
  10. 一个简单的DDraw应用程序2
  11. 关于线程的停止、挂起、退出(修改)
  12. 云栖大会「云计算产业升级峰会」免费抢票啦!
  13. 558. 四叉树交集
  14. Chatopera王海良:大厂螺丝钉还是开源极客?年轻技术人如何选择?
  15. 计算机成绩统计优秀率,高校学生考试成绩的数据分析模式与可视化研究
  16. 如何修改游戏服务器数据包,游戏数据包的定义
  17. 如何获取微信好友的地理位置信息
  18. 马来西亚之旅——吉隆坡、马六甲、槟城和亚庇攻略
  19. 时间序列分析-----2---时间序列预处理
  20. CSS filter有哪些神奇用途

热门文章

  1. 文字处理技术:新布局思路验证成功
  2. Android Studio 编译输出中文乱码的解决办法
  3. Github分支管理范例
  4. 解决办法:不在sudoers文件中此事将被报告
  5. redo log 和undo log_MySQL 持久化保障机制-redo 日志
  6. mysql中regexp用法_MySQL中REGEXP正则表达式使用大全
  7. 软件测试 vb,使用VB6.0进行自动化测试
  8. c++ primer plus 对象和类
  9. 从事计算机工作的应该,未来想从事计算机方面的工作,现在应该学习些什么东西?...
  10. 大华摄像头解码 ffmpeg_解码矩阵配套液晶拼接屏系统解决安防行业设备过于复杂的问题...