题解 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");//查询
//哪有那么烦?
}
}