题目链接:https://www.jisuanke.com/contest/870

题意:

给出两个字符串S和T,Q次操作:①C a b表示将第a个字符改为b;②Q l r表示T在S的子串[l, r]中共出现多少次

其中|S|<=100000,|T|<=10,Q<=100000

思路:

若S串的子串[x-|T|+1, x]和T串完美匹配,那么flag[x]==1,否则flag[x]==0,sum[]是flag[]的前缀和

这样每次查询区间[l, r]答案就是sum[r]-sum[l+|T|-2],注意特判r<l+|T|-2的情况

用树状数组维护就好

又因为|T|<10,所以每次修改影响的范围很小,可以直接暴力

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL long long
char str[100005], jud[100005];
int n, nj[100005], ns[100005];
LL tre[100005];
void Update(int x, int val)
{while(x<=n){tre[x] += val;x += x&-x;}
}
LL Query(int x)
{LL sum = 0;while(x){sum += tre[x];x -= x&-x;}return sum;
}
int main(void)
{char ch[15];int T, Q, m, p, q, L, R;scanf("%d", &T);while(T--){scanf("%d%s%s", &Q, str+1, jud+1);n = strlen(str+1);m = strlen(jud+1);p = 0, q = 1;memset(nj, 0, sizeof(nj));memset(tre, 0, sizeof(tre));memset(ns, 0, sizeof(ns));while(q<=m){if(p==0 || jud[p]==jud[q]){p++, q++;if(jud[p]==jud[q])nj[q] = nj[p];elsenj[q] = p;}elsep = nj[p];}p = q = 1;while(p<=n){while(str[p]!=jud[q] && q>=1)q = nj[q];if(q==0){ns[p] = 0;p++, q++;continue;}ns[p++] = q++;if(q==m+1){Update(p-1, 1);q = nj[q];}}while(Q--){scanf("%s", ch);if(ch[0]=='Q'){scanf("%d%d", &L, &R);if(L+m-1>R)printf("0\n");elseprintf("%lld\n", Query(R)-Query(L+m-2));}else{scanf("%d%s", &R, ch);p = max(R-15, 0), q = ns[p];str[R] = ch[0];while(p<=R+15 && p<=n){while(str[p]!=jud[q] && q>=1)q = nj[q];if(q==0){if(ns[p]==m)Update(p, -1);ns[p] = 0;p++, q++;continue;}if(ns[p]==m)Update(p, -1);ns[p++] = q++;if(q==m+1){Update(p-1, 1);q = nj[q];}}}}printf("\n");}return 0;
}

2017 ACM-ICPC乌鲁木齐网络赛 G. Query on a string(KMP+树状数组)相关推荐

  1. 2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树

    I. Yukino With Subinterval 题目链接: Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a ...

  2. 2019 南京 网络赛 B (二维偏序,树状数组离线)

    题意: 给出一N*N的蛇形矩阵,具体位置元素值不给你,自己找规律,然后给你M个 有效位置,P次查询,每次查询一个子矩阵中有效元素的权值和,该权值和等于对于 每个有效元素,模10拆分后相加得到的和.(注 ...

  3. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化

    题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...

  5. ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

  6. 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组

    在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己  ...

  7. 2017年河北省大学生程序设计竞赛 奇异旅馆 【并查集+树状数组】

    奇异旅馆 Time Limit : 3000/1000ms (Java/Other)   MemoryLimit : 65535/32768K (Java/Other) Total Submissio ...

  8. 19 ICPC 徐州网络赛 G. Colorful String(回文树)

    传送门 题意:求出给出的字符串中所有回文字符串的不同字符和. 思路:回文树+二进制表示字符 (例如 a==1<<0,b==1<<1,c==1<<2,d==1< ...

  9. HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力

    题目链接 题意:给你一个区间l,r一直将val[l]模上val[l+1],val[l+2]...val[r],因为一个模上比前一个数小数是没有意义的,所以需要将每一个点找到右边第一个小于他的点就行. ...

最新文章

  1. ucint核心边缘分析_5G、云计算、物联网与边缘计算的相辅相承
  2. 使用C#中的ref关键字,用2个简单例子来说明
  3. 【译】The Faults and Shortcomings of the EVM
  4. MOSN 多协议扩展开发实践
  5. .netframework3.5 中TimeZoneInfo 类的使用
  6. python自带的解释器叫做_python学习
  7. C#LeetCode刷题-分治算法
  8. uestc oj 1218 Pick The Sticks (01背包变形)
  9. 小程序接入h5页面_原生小程序接入H5页面,请求后台接口,获取数据
  10. 三、五分钟部署一台电脑,你相信吗?
  11. 利用客户端cookie保存用户信息
  12. 霍尔编码器-STM32读取
  13. C语言也能干大事第七节(如鹏基础)
  14. Vue使用createWebHistory 页面刷新变成白页 解决
  15. python将一个word文档中内容全部复制,添加到另一个word文档末
  16. 抖音作品别人保存不了,这个方法可快速将抖音短视频下载到本地
  17. Vue中配置代理服务器
  18. realsense moveit生成octomap错误:‘Client [/move_group] wants topic /camera/color/image_raw to have dataty
  19. [架构]MVC/MCP/MVVM三个框架模式
  20. 程序员深爱的bilibili后台源码泄露,看哔哩哔哩官方回应才放心了

热门文章

  1. python教程推荐-关于推荐系统的详细介绍
  2. python语言入门-python语言入门资料
  3. python工资高还是java-Python工资高还是Java工资高?Python和Java学哪个?
  4. iOS利用Speech Kit实现语音识别
  5. 语音识别芯片的工作原理和分类
  6. 成都这家AI语音芯片公司又融了数千万,能“偷袭”科大讯飞不?
  7. JavaScript-闭包closure
  8. css-元素居中方法总结
  9. python读取idx_使用groupby和transform获取idxmaxp
  10. python除法保留两位小数_java实现两个整数相除保留一位小数