UOJ Easy Round #11A. 切割冰片

UOJ Easy Round #11A. 切割冰片

观察到每条横线盖住的竖线不交且连续且单调。

fi,jf_{i,j} 表示考虑了前 ii 条横线,前 jj 条竖线。

枚举第 ii 条横线覆盖了几条竖线。

jlij \leq l_i,则 f[i][j]=k=0jf[i1][k]f[i][j] = \sum_{k=0}^{j}f[i-1][k]

j>lij > l_i,则 f[i][j]=f[i1][j]f[i][j] = f[i - 1][j]

发现相当于是对一个长度 10910^9 的数组的前若干项做前缀和,然后询问和。

考虑优化 mm 维。

法一

考虑快速维护一个结构,满足数列全体求前缀和,询问单点,全体加一个值,便可很好维护上述过程。

构造多项式:

f(x)=i=0nai(x+ii)f(x)=\sum_{i=0}^{n}a_i\binom{x+i}{i}

做前缀和:

g(x)=i=0xf(i)=i=0xj=0numaj(i+jj)=j=0naji=0x(i+jj)=j=0naj(x+j+1j+1)=i=1n+1ai1(x+ii)\begin{aligned} g(x)&=\sum_{i=0}^x f(i)\\ &=\sum_{i=0}^x \sum_{j=0}^{num} a_j{i+j \choose j}\\ &=\sum_{j=0}^{n} a_j \sum_{i=0}^x {i+j \choose j}\\ &=\sum_{j=0}^{n} a_j {x+j+1 \choose j+1}\\ &=\sum_{i=1}^{n+1} a_{i-1} {x+i \choose i} \end{aligned}

于是将系数右移即可,还可通过 a0a0+vala_0\leftarrow a_0+val 实现全体加值。

将整个序列拆成 O(n)\mathcal O(n) 段,分别维护即可。

struct Poly {
	int f[_], num;
	void init () {
		f[num = 0] = 0;
	}
	void add(int x) {
		f[0] += x;
	}
	void upd() {
		++num;
		dF(i, num, 1) f[i] = f[i - 1];
		f[0] = 0;
	}
	int qry(int x) {
		int res = 0;
		int nw = 1;
		F(i, 0, num) {
			res = (res + 1ll * f[i] * nw % mod) % mod;
			nw = 1ll * nw * inv[i + 1] % mod * (x + i + 1) % mod;
		}
		return res;
	}
} g[_];

法二

将整个序列拆成 O(n)\mathcal O(n) 段,维护每段的 kk 阶前缀和。

kk 阶前缀和公式:

Sk,i=1ji(k+ij1k1)ajS_{k,i} = \sum_{1 \le j \le i} \binom{k + i - j - 1}{k-1}a_j

路径计数,推推组合数即可。

dp[0][0] = f[0][0] = 1;
	for (int i = 1; i <= tot; i++) f[0][i] = ADD(f[0][i - 1], dp[0][i]);
	for (int i = 1; i <= n; i++) {
		dp[i][0] = 1;
		for (int j = 1; j <= tot; j++) {
			if (L[i] < lsh[j]) {
				for (int k = j; k <= tot; k++) dp[i][k] = dp[i - 1][k];
				break ;
			}
			int res = 1, nn = lsh[j] - lsh[j - 1] - 1, mm = 0;
			for (int k = i; k >= 1; k--) {
				if (L[k] < lsh[j]) continue;
				++nn, ++mm;
				res = res * nn % mod * inv[mm] % mod;
				dp[i][j] = ADD(dp[i][j], 1ll * f[k - 1][j - 1] * res % mod);
				if (dp[i][j] < 0) dp[i][j] += mod;
			}
		}
		f[i][0] = dp[i][0];
		for (int j = 1; j <= tot; j++) f[i][j] = ADD(f[i][j - 1], dp[i][j]);
	}
posted @ 2023-07-19 12:08  蒟蒻orz  阅读(1)  评论(0编辑  收藏  举报  来源