CF914F Substrings in a String 题解

正解分块+后缀自动机?什么东西,我不知道……所以我选择伟大的bitset,复杂度\(O(\frac{n^2}{w})\),可以通过,并且在分块+后缀自动机还被卡常的时候跑的飞起!

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
bitset<maxn>a[26],ans;
string s,t;
int m,l,r,op;
char c;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>s>>m;
	for(int i=0;i<s.size();i++){
		a[s[i]-'a'][i]=1;
	}
	while(m--){
		cin>>op>>l;
		l--;
		if(op==1){
			cin>>c;
			a[s[l]-'a'][l]=0;
			s[l]=c;
			a[s[l]-'a'][l]=1;
		}
		else{
			cin>>r>>t;
			r--;
			if(r-l+1<t.size()){
				cout<<0<<'\n';
				continue;
			}
			ans=0;
			ans=~ans;
			for(int i=0;i<t.size();i++){
				ans&=(a[t[i]-'a']>>i);
			}
			cout<<(ans>>l).count()-(ans>>(r-t.size()+2)).count()<<'\n';
		}
	}
	return 0;
}
posted @ 2025-05-16 16:22  特别之处  阅读(16)  评论(0)    收藏  举报