• 题解:

    • 分块对每个块的起点$st[i]$到$n$做一次回文自动机;
    • 由于子串的回文自动机是原串的子图,所以并不需要重新构图,在原来的图上做即可;
    • 做的时候记录某个终点的本质不同的回文串和$sum[i][r]$
    • 对于询问$[l,r]$,直接统计$l$后的整块,考虑统计$l$所在的散块$[l,st[i]]$
    • 根据回文串的对称性,可以预处理出在$st[i]$匹配的最长回文后缀节点,所以从st[i]到l暴力即可;
    • 注意判断是否重复和是否超出边界;
    • 暂时还不会两个log的做法;
    •  #include<bits/stdc++.h>
      #define rg register
      using namespace std;
      const int M=,N=;
      int T,n,m,typ,sz,ch[N][],Fl[N][],fl[N],end[M][N],pos[M][N];
      int sum[M][N],u,tot,bl[N],st[N],ed[N],lst,vis[N],len[N],s[N];
      inline char gc(){
      static char*p1,*p2,buf[];
      if(p1==p2)p2=(p1=buf)+fread(buf,,,stdin);
      return(p1==p2)?EOF:*p1++;
      }
      inline int rd(){
      int x=;char c=gc();
      while(c<''||c>'')c=gc();
      while(c>=''&&c<='')x=(x<<)+(x<<)+c-'',c=gc();
      return x;
      }
      void extend1(int l,int i){
      int x=lst;
      if(i-len[x]-<l||s[i-len[x]-]!=s[i])x=Fl[x][s[i]];
      if(!ch[x][s[i]]){
      len[++sz]=len[x]+;
      int y=fl[x];
      if(s[i-len[y]-]!=s[i])y=Fl[y][s[i]];y=ch[y][s[i]];
      memcpy(Fl[sz],Fl[y],sizeof(Fl[y]));
      Fl[sz][s[i-len[y]]]=fl[sz]=y;
      ch[x][s[i]]=sz;
      }
      lst=x=ch[x][s[i]];
      }
      void extend2(int i,int r){
      int x=lst;
      if(i+len[x]+>r||s[i+len[x]+]!=s[i])x=Fl[x][s[i]];
      if(!ch[x][s[i]]){
      len[++sz]=len[x]+;
      int y=fl[x];
      if(s[i+len[y]+]!=s[i])y=Fl[y][s[i]];y=ch[y][s[i]];
      memcpy(Fl[sz],Fl[y],sizeof(Fl[y]));
      Fl[sz][s[i+len[y]]]=fl[sz]=y;
      ch[x][s[i]]=sz;
      }
      lst=x=ch[x][s[i]];
      }
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("loj6070.in","r",stdin);
      freopen("loj6070.out","w",stdout);
      #endif
      typ=rd();n=rd();m=rd();
      u = sqrt(n);
      char c=gc();while(!isalpha(c))c=gc();
      for(int i=;i<=n;++i,c=gc()){
      bl[i]=(i-)/u+;ed[bl[i]]=i;
      if(!st[bl[i]])st[bl[i]]=i;
      s[i]=c-'a';
      }tot=bl[n];
      sz=;
      fl[]=;fl[]=;
      len[]=;len[]=-;
      for(rg int i=;i<;++i)Fl[][i]=;
      memset(end,0x3f,sizeof(end));
      for(rg int i=;i<=tot;++i){
      lst=;T++;
      for(rg int j=st[i];j<=n;++j){
      extend1(st[i],j);
      sum[i][j]=sum[i][j-];
      if(vis[lst]<T){
      vis[lst]=T;
      sum[i][j]++;
      end[i][lst]=j;
      }
      if(len[lst]==j-st[i]+)pos[i][j]=lst;
      else pos[i][j]=pos[i][j-];
      }
      }
      int ans=;
      for(rg int i=,l,r;i<=m;++i){
      T++;
      l=rd();r=rd();
      if(typ)l^=ans,r^=ans;
      if(bl[l]==bl[r]){
      lst=;ans=;
      for(rg int j=l;j<=r;++j){
      extend1(l,j);
      if(vis[lst]<T)vis[lst]=T,ans++;
      }
      }else{
      ans=sum[bl[l]+][r];
      lst=pos[bl[l]+][r];
      for(rg int j=ed[bl[l]];j>=l;--j){
      extend2(j,r);
      if(vis[lst]<T&&end[bl[l]+][lst]>r)vis[lst]=T,ans++;
      }
      }
      printf("%d\n",ans);
      }
      return ;
      }

      loj6070

loj6070【山东集训第一轮Day4】基因的更多相关文章

  1. 【考试记录】2018 山东省队集训第一轮D4(雾)

    T1题意: 给你一个$n\times m$的矩阵$B$,求它能由最少多少个形如两个向量之积$(n\times 1)\times(1\times m)$的矩阵相加得到. 题解: 考虑上界,最多需要$mi ...

  2. 上海市2019年公务员录用考试第一轮首批面试名单(B类)

    上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...

  3. 上海市2019年公务员录用考试第一轮首批面试名单(A类)

    上海市2019年公务员录用考试第一轮首批面试名单(A类) 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 ...

  4. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息

    项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...

  5. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  6. Postmortem Report 第一轮迭代事后分析报告

    一.设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件<BlueZ>是一款全新动作类塔防游戏.与市面上已经存在的塔防游戏不同 ...

  7. SDOI2017第一轮

    本蒟蒻表示终于$AC$了$SDOI2017\text{第一轮}$! 兴奋! 附上各个题的题解: $DAT1$: $T1$: BZOJ4816: [Sdoi2017]数字表格 $T2$: BZOJ481 ...

  8. 史上最全的CSP-J/S 第一轮知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  9. it's over | 2019 CSP-S 第一轮认证

    不知道自己有没有凉,毕竟我们省这么弱(据说有的省80都悬... 其实这几天对初赛基本没什么感觉,可能是没给自己多大压力吧,倒是班上的一群同学似乎比我们还着急,我们的数学课代表兼数竞大佬特意给我画了吉祥 ...

随机推荐

  1. RAID中条带的概念

    raid把数据分成条带,一个条带横跨所有数据磁盘,每个磁盘上存储条带的一部分,称为sagment,也称为条带深度.一个条带包含的扇区或块的个数,称为条带长度. raid向操作系统提供的是卷,是连续的扇 ...

  2. [机器学习]-K近邻-最简单的入门实战例子

    本篇文章分为两个部分,前一部分主要简单介绍K近邻,后一部分是一个例子 第一部分--K近邻简介 从字面意思就可以容易看出,所谓的K近邻,就是找到某个样本距离(这里的距离可以是欧式距离,曼哈顿距离,切比雪 ...

  3. jobs命令详解

    基础命令学习目录首页 在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台.导致无法退出root的. 输入命令:exit终端显示:There are stopped jobs. 解决方法:方法一 ...

  4. Nginx 使用(server参数配置)

    文件地址nginx/conf/Nginx.conf 文件地址;nginx/conf/Nginx.conf [java] view plain copy server {# 服务名及配置,一个服务下可以 ...

  5. 凡事不求甚解,遇事必定抓瞎——PHP开发Apache服务器配置备忘录

    照此配置流程,绝对一路畅通,可保无虞. 昨天弄了个PHP小程序,想在本地跑一下测试,可是工作电脑没有安装环境,于是下载了一个wamp,一路畅通,Apache.Mysql.PHP就全有了.启动wamp服 ...

  6. 转载---LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    总是分不太清楚LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别,每次都是现查一下,转载到这里,备忘... 转载自:https://www.cnblogs.com/panfeng4 ...

  7. 互评beta版本 - 探路者【贪吃蛇】

    基于NABCD评论,及改进建议 1)N(Need 需求) 开发本软件一方面是为了让80,90后用户重温童年的美好记忆,另一方面也是为了增加对英语学习兴趣较弱.意志力薄弱的中小学生学习英语的兴趣和动力, ...

  8. 奔跑吧DKY——团队Scrum冲刺阶段-Day 7

    今日完成任务 谭鑫:将人物图添加到游戏以及商店界面中,实现商店的选择换装功能 黄宇塘:制作人物图.背景图 赵晓海:阅读所有代码测试所有功能,美化部分界面 方艺雯:为商店界面及关于界面添加必要文字说明 ...

  9. class 3 求数组中的最大值(单元测试)

    1.问题引出: int Largest(int list[], int length) { int i,max; ; i < (length – ); i ++ ) { if(list[i] & ...

  10. css3学习笔记二

    接着是对图形移动.旋转.倾斜.放缩的处理. -moz-transform:translateX(x deg) translateY(x deg);/*图形会沿着XY轴移动*/ -moz-transfo ...