*[题解]提高十连测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();
}

T3树

posted @ 2020-08-03 17:05  ZTC_ZTC  阅读(148)  评论(0编辑  收藏  举报