• 题解:

    • 分块对每个块的起点$st[i]$到$n$做一次回文自动机;
    • 由于子串的回文自动机是原串的子图,所以并不需要重新构图,在原来的图上做即可;
    • 做的时候记录某个终点的本质不同的回文串和$sum[i][r]$
    • 对于询问$[l,r]$,直接统计$l$后的整块,考虑统计$l$所在的散块$[l,st[i]]$
    • 根据回文串的对称性,可以预处理出在$st[i]$匹配的最长回文后缀节点,所以从st[i]到l暴力即可;
    • 注意判断是否重复和是否超出边界;
    • 暂时还不会两个log的做法;
    •  1 #include<bits/stdc++.h>
       2 #define rg register
       3 using namespace std;
       4 const int M=320,N=200010;
       5 int T,n,m,typ,sz,ch[N][26],Fl[N][26],fl[N],end[M][N],pos[M][N];
       6 int sum[M][N],u,tot,bl[N],st[N],ed[N],lst,vis[N],len[N],s[N];
       7 inline char gc(){
       8     static char*p1,*p2,buf[1000000];
       9     if(p1==p2)p2=(p1=buf)+fread(buf,1,1000000,stdin);
      10     return(p1==p2)?EOF:*p1++;
      11 }
      12 inline int rd(){
      13     int x=0;char c=gc();
      14     while(c<'0'||c>'9')c=gc();
      15     while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+c-'0',c=gc();
      16     return x;
      17 }
      18 void extend1(int l,int i){
      19     int x=lst;
      20     if(i-len[x]-1<l||s[i-len[x]-1]!=s[i])x=Fl[x][s[i]];
      21     if(!ch[x][s[i]]){
      22         len[++sz]=len[x]+2;
      23         int y=fl[x];
      24         if(s[i-len[y]-1]!=s[i])y=Fl[y][s[i]];y=ch[y][s[i]];
      25         memcpy(Fl[sz],Fl[y],sizeof(Fl[y]));
      26         Fl[sz][s[i-len[y]]]=fl[sz]=y;
      27         ch[x][s[i]]=sz;
      28     }
      29     lst=x=ch[x][s[i]];
      30 }
      31 void extend2(int i,int r){
      32     int x=lst;
      33     if(i+len[x]+1>r||s[i+len[x]+1]!=s[i])x=Fl[x][s[i]];
      34     if(!ch[x][s[i]]){
      35         len[++sz]=len[x]+2;
      36         int y=fl[x];
      37         if(s[i+len[y]+1]!=s[i])y=Fl[y][s[i]];y=ch[y][s[i]];
      38         memcpy(Fl[sz],Fl[y],sizeof(Fl[y]));
      39         Fl[sz][s[i+len[y]]]=fl[sz]=y;
      40         ch[x][s[i]]=sz;
      41     }
      42     lst=x=ch[x][s[i]];
      43 }
      44 int main(){
      45     #ifndef ONLINE_JUDGE
      46     freopen("loj6070.in","r",stdin);
      47     freopen("loj6070.out","w",stdout);
      48     #endif
      49     typ=rd();n=rd();m=rd();
      50     u = sqrt(n);
      51     char c=gc();while(!isalpha(c))c=gc();
      52     for(int i=1;i<=n;++i,c=gc()){
      53         bl[i]=(i-1)/u+1;ed[bl[i]]=i;
      54         if(!st[bl[i]])st[bl[i]]=i;
      55         s[i]=c-'a';
      56     }tot=bl[n];
      57     sz=1;
      58     fl[0]=1;fl[1]=0;
      59     len[0]=0;len[1]=-1;
      60     for(rg int i=0;i<26;++i)Fl[0][i]=1;
      61     memset(end,0x3f,sizeof(end));
      62     for(rg int i=1;i<=tot;++i){
      63         lst=0;T++;
      64         for(rg int j=st[i];j<=n;++j){
      65             extend1(st[i],j);
      66             sum[i][j]=sum[i][j-1];
      67             if(vis[lst]<T){
      68                 vis[lst]=T;
      69                 sum[i][j]++;
      70                 end[i][lst]=j;
      71             }
      72             if(len[lst]==j-st[i]+1)pos[i][j]=lst;
      73             else pos[i][j]=pos[i][j-1];
      74         }
      75     }
      76     int ans=0;
      77     for(rg int i=1,l,r;i<=m;++i){
      78         T++;
      79         l=rd();r=rd();
      80         if(typ)l^=ans,r^=ans;
      81         if(bl[l]==bl[r]){
      82             lst=0;ans=0;
      83             for(rg int j=l;j<=r;++j){
      84                 extend1(l,j);
      85                 if(vis[lst]<T)vis[lst]=T,ans++;
      86             }
      87         }else{
      88             ans=sum[bl[l]+1][r];
      89             lst=pos[bl[l]+1][r];
      90             for(rg int j=ed[bl[l]];j>=l;--j){
      91                 extend2(j,r);
      92                 if(vis[lst]<T&&end[bl[l]+1][lst]>r)vis[lst]=T,ans++;
      93             }
      94         }
      95         printf("%d\n",ans);
      96     }
      97     return 0;
      98 }

      loj6070

转载于:https://www.cnblogs.com/Paul-Guderian/p/10311828.html

loj6070【山东集训第一轮Day4】基因相关推荐

  1. 2022年度前8强20强|香港科大-越秀集团百万奖金国际创业大赛·2022年度总决赛第一轮评审结果公布!...

    2022年12月12日-21日,"香港科大-越秀集团"百万奖金国际创业大赛·2022年度总决赛[第一轮评审]圆满完成! 在本轮评审中,在各赛区前三名入围年度总决赛的23个项目中,评 ...

  2. 2019 CSP-J/S第一轮各省分数线统计与分析(含浙江省)

    <CSP-J/S2019第一轮认证成绩及第二轮 晋级规则公示(浙江)>浙江省的分数线终于千呼万唤始出来, 浙江省A类:按第一轮认证成绩进行筛选,分数线和名额分配如下:J组入围线80分,共1 ...

  3. ccfcsp题库c语言,2019年CCF认证第一轮CSP-S信息学C++试题答案A卷

    原标题:2019年CCF认证第一轮CSP-S信息学C++试题答案A卷 CSP-J/S是CCF创办的CSP(软件能力认证)中面向非专业级的软件能力认证,于今年首次开设,分为CSP-J(入门级,Junio ...

  4. CSP-J2021 第一轮(初赛)游记

    # CSP-J2021 第一轮(初赛)游记 ## 前言 本次 CSP 已经是本蒟蒻的第三个赛季了.(**坐标:山东济南**) 首先回顾一下前两个赛季: $2019$:CSP-X 二等奖[小学组],当时 ...

  5. 2021年CSP-J/S 第一轮(初赛)各省的晋级分数线汇总分析

    CSP-J/S 竞赛,比的不仅仅是选手的编程水平,还有我们对比赛相关信息的了解程度.比如:有一些省份的晋级分数线会很低,有些省份进行分区划分分数线······. 今天整理了 2021年CSP-J/S  ...

  6. 第一轮通知 | 2022年中国生物物理学会肠道菌群分会年会暨“崂山论肠菌”学术论坛...

    2022年中国生物物理学会肠道菌群分会年会 暨"崂山论肠菌"学术论坛   第一轮通知  为促进肠道菌群及相关领域科研工作者的合作和交流,由中国生物物理学会肠道菌群分会主办, 中国微 ...

  7. 皮一皮:据说这是英超第一轮之后的情况...

    英超第一轮状态

  8. Java 9进入第一轮问题修复阶段

    Java 9功能特性正式完成,这意味着第一个问题修复阶段已经开始.HTTP/2客户端没有在截止日期前完成,现已降级为孵化器功能.由于现在的目标是在7月准备好可发布的Java 9,所以目前不太可能添加任 ...

  9. 2022春招马蜂窝旅游网第一轮面试 面经

    笔试->第一轮面试-> 1.MySQL调优 2.索引(问了底层,B+树) 3.线程的实现方式 4.线程池原理 5.I/O流 6.JUC中的锁(可重入锁.CompletableFuture) ...

最新文章

  1. AAAI 2021 | 语义解析最新进展解读
  2. 【学习备份】ajax添加小例子
  3. android闹钟的需求分析,手机小闹钟需求分析
  4. PHP实现弹出消息提示框的两种方法
  5. 前端打包利器webpack里utils.cssLoaders的工作原理调试
  6. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...
  7. 【英语学习】【Level 08】U04 What I love L5 Breathe in, breathe out
  8. B+/-Tree原理
  9. my java note -------String 类的实例化
  10. 医院CRM客户关系管理系统
  11. 八种颠覆未来作战的前沿技术
  12. java web 读取txt文件_java读取TXT文件
  13. springboot毕业设计题目课题参考
  14. divgrad怎么求_[怎样理解圆柱坐标系和球坐标系求梯度.散度]球坐标系梯度如何求...
  15. java date类 时区_Java Date 与时区
  16. 学习Python的基础,Python的数据类型和变量
  17. 数学建模之马尔萨斯模型(入门版)
  18. 安全测试之SQL注入攻击
  19. 基础练习:1085:球弹跳高度的计算
  20. 近日学习笔记:df -h和du -sh命令,查看linux版本,vbm管理工具,su命令,ssh服务升级技巧,source命令

热门文章

  1. Linux系统基础知识整理
  2. 大型分布式网站架构技术总结
  3. Asp.Net 学习资源列表
  4. 千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死...
  5. SimpleDateFormat线程不安全
  6. LeetCode算法题-Reverse Linked List(Java实现)
  7. 应用开发也去中心化?基于BCH的筹款平台Akari-Pages与Lighthouse正面交锋
  8. Java多线程之Lock接口
  9. MOSS 2010:Visual Studio 2010开发体验(26)——工作流开发概述
  10. MMA冠军Rory MacDonald:比特币现金(BCH)是真正的比特币