题解 CF580E 【Kefa and Watch】

这个题目其实很简单啊…… 看了一下题解基本上都做烦了,一个 memcmp 的水题,怎么还用到了什么线段树维护哈希?开玩笑。。。

注意到所有数字都在 0~9 之间,于是可以考虑把放在字符数组里,然后每次更新直接 memcpy,查询 memcmp。

然后就结束了?

上代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<bits/stdc++.h>
char s[100100];
int main(){
int n,m,k,l,r,c,i,f;
scanf("%d%d%d%s",&n,&m,&k,s+1);//读入初始序列:直接转成char
m+=k;
for(i=0;i<m;i++){
scanf("%d%d%d%d",&f,&l,&r,&c);
if(f==1) memset(s+l,c+'0',r-l+1);//修改
else puts(memcmp(s+l,s+l+c,r-l-c+1)?"NO":"YES");//查询
//哪有那么烦?
}
}