2025 贵阳 代码源 Day 10 模拟赛 code

Day 10 模拟赛 code

A

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define LL long long
#define DB double
#define PII pair<int, int>
// #define PII pair<long long, long long>
#define fr first
#define sc second
#define mp make_pair
const int N = 1e3 + 10, M = 20 + 10, K = 2e6 + 10;
const LL P = 998244353;
int n, m;
LL c[N][N], s[N][N], mx[N][N], d[N], sd[N];
int work() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> c[i][j];
			s[i][j] = s[i][j - 1] + c[i][j];
		}
		mx[i][m + 1] = -1e18; for (int j = m; j >= 0; j--) mx[i][j] = max(mx[i][j + 1], s[i][j]);
	}
	for (int i = 0; i <= m; i++) cin >> d[i];
	sd[0] = d[0]; for (int i = 1; i <= m; i++) sd[i] = sd[i - 1] + d[i];
	LL ans = -1e18;
	for (int j = 0; j <= m; j++) {
		LL sum = 0;
		for (int i = 1; i <= n; i++) sum += mx[i][j];
		for (int i = 1; i <= n; i++) {
			ans = max(ans, sum - mx[i][j] + s[i][j] + sd[j]);
		}
	}
	cout << ans << '\n';
	return 0;
}
signed main() {
	// ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	// init();
	// freopen("test.in", "r", stdin);
	// freopen("test.out", "w", stdout);
	int T = 1;
	cin >> T;
	while (T--) { work(); }
	return 0;
}

B

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define LL long long
#define DB double
#define PII pair<int, int>
// #define PII pair<long long, long long>
#define fr first
#define sc second
#define mp make_pair
const int N = 2e5 + 10, M = (1 << 23) + 10, K = 2e6 + 10;
const LL P = 998244353;
int n, a[N], b[N], f[2][M], g[2][M];
int work() {
	cin >> n;
	int lg = __lg(n) + 2, all = ((1 << lg) - 1);
	for (int j = 0; j < (1 << lg); j++) {
		f[0][j] = g[0][j] = -2e9;
		f[1][j] = g[1][j] = 2e9;
	}
	for (int i = 0; i < n; i++) cin >> a[i], f[0][i ^ all] = f[1][i ^ all] = a[i];
	for (int i = 0; i < n; i++) cin >> b[i], g[0][i ^ all] = g[1][i ^ all] = b[i];
	// for (int i = 0; i < n; i++) cout << "    " << i << ' ' << (i ^ all) << '\n';
	for (int i = 0; i < lg; i++) {
		for (int j = 0; j < (1 << lg); j++) {
			if((j & (1 << i))) {
				f[0][j] = max(f[0][j], f[0][j ^ (1 << i)]);
				g[0][j] = max(g[0][j], g[0][j ^ (1 << i)]);
				f[1][j] = min(f[1][j], f[1][j ^ (1 << i)]);
				g[1][j] = min(g[1][j], g[1][j ^ (1 << i)]);
			}
		}
	}
	// for (int j = 0; j < (1 << lg); j++) cout << "      " << j << ' ' << f[j ^ all] << '\n';
	LL ans = 0, res = -4e18;
	for (int i = n - 1; i >= 0; i--) {
		for (int x = 0; x < 2; x++) for (int y = 0; y < 2; y++) res = max(res, (LL)f[x][i ^ all] * g[y][i ^ all]);
		// cout << i << ' ' << res << '\n';
		ans = ((ans + (res % P + P) % P) % P + P) % P;
	}
	cout << (ans % P + P) % P << '\n';
	return 0;
}
signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	// init();
	// freopen("test.in", "r", stdin);
	// freopen("test.out", "w", stdout);
	int T = 1;
	cin >> T;
	while (T--) { work(); }
	return 0;
}

C

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define LL long long
#define PII pair<int, int>
// #define PII pair<long long, long long>
#define fr first
#define sc second
const int N = 2e5 + 10, M = 25;
const LL P = 998244353;
int n, a[N], g[N], f[N];
map<int, int> cnt, lst, cl, cr;
int work() {
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	vector<int> v;
	int ml = -1, mr = -1;
	for (int i = 1; i <= n; i++) {
		if (cnt[a[i]] > 0) {cnt.clear(), ml = i - 1; break;}
		cnt[a[i]]++;
	}
	cr.clear();
	for (int i = n; i > 0; i--) {
		if (cr[a[i]] > 0) {mr = i + 1; break;}
		cr[a[i]]++;
	}
	if (ml == -1) {cout << 0; return 0;}
	cnt.clear();
	int mn = n + 1; f[n + 1] = g[n + 1] = 0;
	for (int i = n; i > 0; i--) {
		if (lst[a[i]] > 0) mn = min(mn, lst[a[i]]);
		lst[a[i]] = i;
		f[i] = f[mn] + 1;
		g[i] = g[mn];
		if (g[i] == 0) g[i] = i;
	}
	// for (int i = 1; i <= n; i++) cout << f[i] << ' ' << g[i] << '\n';
	int r = mr, ans = 2e9;
	for (int l = 0; l <= ml; l++) {
		// cout << "  " << l << ' ' << r << ' ' << f[l + 1] - 1 + (r > g[l + 1]) << '\n';
		ans = min(ans, (f[l + 1] - 1 + (r > g[l + 1])) / 2 + 1);
		cl[a[l + 1]]++;
		while (cr[a[l + 1]] > 0 && r <= n) cr[a[r]]--, r++;
	}
	cout << ans;
	return 0;
}
signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	// init();
	// freopen("test.in", "r", stdin);
	// freopen("test.out", "w", stdout);
	int T = 1;
	// cin >> T;
	while (T--) { work(); }
	return 0;
}

D

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define LL long long
#define PII pair<int, int>
// #define PII pair<long long, long long>
#define fr first
#define sc second
const int N = 5e5 + 10, M = 5e5;
const LL P = 998244353;
int n;
LL w[N];
// LL f[N][N];
namespace Treap {
	mt19937 rd(114514);
	const int T_SZ = 5e5 + 10;
	int siz[T_SZ], ls[T_SZ], rs[T_SZ], pri[T_SZ], cnt = 0, root = 0;
	LL val[T_SZ], tag[N];
	void push_up(int rt) {
		siz[rt] = siz[ls[rt]] + siz[rs[rt]] + 1;
	}
	void push_down(int rt) {
		if(tag[rt]) {
			val[rt] += tag[rt];
			tag[ls[rt]] += tag[rt]; tag[rs[rt]] += tag[rt];
			tag[rt] = 0;
		}
	}
	void Split(int rt, int k, int &rt1, int &rt2) {
		if(!rt) return (void)(rt1 = rt2 = 0);
		push_down(rt);
		if(k <= siz[ls[rt]]) {
			Split(ls[rt], k, rt1, rt2);
			ls[rt] = rt2;
			push_up(rt);
			rt2 = rt;
		} else {
			Split(rs[rt], k - siz[ls[rt]] - 1, rt1, rt2);
			rs[rt] = rt1;
			push_up(rt);
			rt1 = rt;
		}
	}
	int Merge(int rt1, int rt2) {
		if(!rt1) return rt2;
		if(!rt2) return rt1;
		if(pri[rt1] < pri[rt2]) {
			push_down(rt1);
			rs[rt1] = Merge(rs[rt1], rt2);
			push_up(rt1);
			return rt1;
		} else {
			push_down(rt2);
			ls[rt2] = Merge(rt1, ls[rt2]);
			push_up(rt2);
			return rt2;
		}
	}
	LL Kth(int k) {
		int rt1 = 0, rt2 = 0, rt3 = 0, c = 0;
		Split(root, k, rt1, rt2);
		Split(rt1, k - 1, rt3, c);
		root = Merge(rt3, Merge(c, rt2));
		return val[c];
	}
	int Rank(int rt, LL v) {
		if(!rt) return 0;
		push_down(rt);
		if(v < val[rt]) return Rank(ls[rt], v);
		else return siz[ls[rt]] + Rank(rs[rt], v) + 1;
	}
	void Insert(LL v) {
		val[++cnt] = v, pri[cnt] = rd(), siz[cnt] = 1;
		int rk = Rank(root, v), rt1 = 0, rt2 = 0;
		Split(root, rk, rt1, rt2);
		root = Merge(Merge(rt1, cnt), rt2);
	}
	void Add(LL w) {
		int rk = Rank(root, w - 1);
		int rt1 = 0, rt2 = 0, rt3 = 0, c = 0;
		Split(root, rk, rt1, rt2);
		tag[rt2] += w;
		Split(rt1, rk - 1, rt3, c);
		LL v = val[c];
		root = Merge(Merge(rt3, c), rt2);
		Insert(v + w);
	}
}using namespace Treap;
int work() {
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> w[i];
	Insert(0);
	for (int i = n; i >= 1; i--) {
		Add(w[i]);
	}
	for (int i = 1; i <= n; i++) {
		cout << Kth(i + 1) << ' ';
	}
	return 0;
}
signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	// init();
	// freopen("test.in", "r", stdin);
	// freopen("test.out", "w", stdout);
	int T = 1;
	// cin >> T;
	while (T--) { work(); }
	return 0;
}
posted @ 2025-08-01 19:02  2020luke  阅读(28)  评论(0)    收藏  举报