首先预处理,分解为n位数至少要多大,然后upper_bound大概就知道拆分为几个数了.
然后考虑最优解,就是每位数劲量的大,因为是相乘,所以中间做多有一个空,我们记录中间空的位置和其实位置以及最后的位置就知道了答案.
前面的数的阶乘以及逆元可以预处理,阶乘的逆元也可以预处理.复制度在O(logn)
#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
const int maxn = 5e4;
const int mod = 1e9+7;
using namespace std;
int sum2[maxn+10];
ll fac[maxn+10];
ll inv[maxn+10];
void init(