*[题解]提高十连测day5
未完待续
T1string
其实有一道加强版的
标准题解:用线段树维护区间内 a~z 的个数,每次询问拆成 26 个 区间修改操作。 时间复杂度 O(mlogn*26)
T2简单的序列
代码:
#define N 110000
ll n,m,ans,mn=1000000007,a[N],sum,f[2200][2200],mod=1000000007;
char s[N];
int main(){
IO::file();
scanf("%lld%lld%s",&n,&m,s+1);
f[0][0]=1;
rep(i,1,m){
a[i]=(s[i]=='('?1:-1);
sum+=a[i];
mn=min(mn,sum);
}
rep(i,1,n-m){
f[i][0]=f[i-1][1];
rep(j,0,i){
f[i][j]=(f[i-1][j+1]+f[i-1][j-1])%mod;
}
}
rep(i,0,n-m)rep(j,0,i)if(j+sum<=n-m&&j+mn>=0)ans=(ans+f[i][j]*f[n-m-i][j+sum]%mod)%mod;
writeln(ans);
IO::flush();
}