Live2D

CF889E Mod Mod Mod

link

Solution

又被踩爆了。。。/kk

注意到对于似乎对于值域上的一段,它的贡献总是一个一次函数形式,因为一开始初始值 \(-1\) 的话,在没有影响后面模出 \(0\) 的情况下,贡献会 \(-n\)

所以我们可以考虑对这条直线进行 dp,设 \(f_{i,j}\) 表示对于前面 \(i\) 个数 \(\ge j\) 的时候贡献至少为 \(i\times j+f_{i,j}\)\(f_{i,j}\) 最大值。

我们考虑如何转移。首先对于 \(j<a_{i+1}\) 的时候,显然存在 \(f_{i+1,j}=f_{i,j}\)

然后考虑到,对于 \([0,j\mod{a_{i+1}}]\) 这一段,转移即是 \(f_{i+1,j\mod {a_{i+1}}}=f_{i,j}+i\times (j-j\mod {a_{i+1}})\)

接着考虑 \([0,a_{i+1}-1]\) 这一段,可以发现最大模 \(a_{i+1}\) 等于 \(a_{i+1}-1\) 的值为 \(y=a_{i+1}-1+a_{i+1}\times \lfloor\frac{j-a_{i+1}+1}{a_{i+1}}\rfloor\),那么变化即是:

那么转移即是:\(f_{i+1,a_{i+1}-1}=f_{i,j}+i\times a_{i+1}\times \lfloor\frac{j-a_{i+1}+1}{a_{i+1}}\rfloor\)

可以用 map 去维护这一过程。

然后考虑复杂度如何计算,可以发现对于一个状态(指第 \(i\) 次插入的 \(a_{i}-1\) ),一次转移值域减少至少一半,所以复杂度即是: \(\Theta(n\log n\log A)\)

Code

#include <bits/stdc++.h>
using namespace std;

#define Int register int
#define int long long
#define MAXN 200005

template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');}
template <typename T> inline void chkmax (T &a,T b){a = max (a,b);}
template <typename T> inline void chkmin (T &a,T b){a = min (a,b);}

int n,s[MAXN];
map <int,int> f;

signed main(){
	read (n);
	for (Int x = 1;x <= n;++ x) read (s[x]);
	f[s[1] - 1] = 0;
	for (Int i = 2;i <= n;++ i)
		for (auto it = f.lower_bound (s[i]);it != f.end();f.erase (it ++)){
			int x = it -> first,y = it -> second;
			chkmax (f[s[i] - 1],y + (i - 1) * s[i] * ((x - s[i] + 1) / s[i]));
			chkmax (f[x % s[i]],y + (i - 1) * (x - x % s[i]));
		}
	int ans = 0;
	for (auto it = f.begin();it != f.end();++ it){
		int x = it -> first,y = it -> second;
		chkmax (ans,x * n + y);
	}
	write (ans),putchar ('\n');
	return 0;
}
posted @ 2022-09-22 22:10  Dark_Romance  阅读(48)  评论(0编辑  收藏  举报