YACS 2022年9月月赛 甲组 T1 游戏体验 题解
最近很有空,我填坑来了(
思路
这道题目有一个很困难的限制:重复玩的角色会让它带来的快乐值清零。我们考虑如何消去这个限制。
考虑如下方法:假如我们考虑
区间内的最后一个
(这样意味着如果玩了这两个,那么快乐值就没了。)
其他的
模拟
如果没看懂,那我们来模拟一下样例:
3 3 6 2 6 1 3 1 1 2 1
首先枚举右端点
3 0 0 0 0 0,最大子段和为
枚举右端点
3 2 0 0 0 0,最大子段和为
枚举右端点
-3 2 3 0 0 0,最大子段和为
枚举右端点
0 2 -3 3 0 0,最大子段和为
(这里你可能会觉得有些问题,但你模拟一下游戏区间右端点为
枚举右端点
0 2 -3 3 6 0,最大子段和为
最后枚举右端点
0 2 0 -3 6 3,最大子段和为
输出的答案为其中最大的一个,即
闲话
此题的数据范围是
char buf[1 << 23], *p1 = buf, *p2 = buf, obuf[1 << 23], *O = obuf; #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread (buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : * p1 ++) inline int rd () { int x = 0; char ch = getchar (); while (!isdigit(ch) ) ch = getchar (); while (isdigit(ch) ) { x = x * 10 + (ch ^ 48); ch = getchar (); } return x; }
当然,线段树的常数毕竟大,所以还是有几个点 TLE,我们加上 register,inline 还是有可能会超时,再加上卡常火车头勉强过了~
卡常火车头,(效果超强,慎用)本地机子运行能快个
#pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks")
最后是
#pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #include <iostream> #define int long long using namespace std; char buf[1 << 23], *p1 = buf, *p2 = buf, obuf[1 << 23], *O = obuf; #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread (buf, 1, 1 << 20, stdin), p1 == p2) ? EOF : * p1 ++) inline int read() { int x = 0; char ch = getchar (); while (!isdigit(ch) ) ch = getchar (); while (isdigit(ch) ) { x = x * 10 + ch - 48; ch = getchar (); } return x; } int n, m, t1, t2, ans; int c[1000005], x[1000005], last[1000005][2]; struct Segment_tree {int l, r, val, sum;}a[4000005]; inline void pushup (int l, int r, int k) { a[k].l = max (a[k << 1].l, a[k << 1].sum + a[k << 1 | 1].l); a[k].r = max (a[k << 1 | 1].r, a[k << 1 | 1].sum + a[k << 1].r); a[k].val = max (a[k << 1].r + a[k << 1 | 1].l, max (a[k << 1].val, a[k << 1 | 1].val) ); a[k].sum = a[k << 1].sum + a[k << 1 | 1].sum; } inline void update (int l, int r, int k) { if (l == r) { a[k].sum = a[k].l = a[k].r = a[k].val = t2; return; } int mid = l + r >> 1; if (t1 <= mid) update (l, mid, k << 1); else update (mid + 1, r, k << 1 | 1); pushup (l, r, k); } signed main () { n = read (); for (int i = 1; i <= n; i ++) c[i] = read (); m = read (); for (int i = 1; i <= m; i ++) x[i] = read (); for (int i = 1; i <= m; i ++) { t1 = last[x[i] ][1], t2 = 0; if (t1 != 0) update (1, m, 1); t1 = last[x[i] ][0], t2 = -c[x[i] ]; if (t1 != 0) update (1, m, 1); t1 = i, t2 = c[x[i] ]; update (1, m, 1); last[x[i] ][1] = last[x[i] ][0]; last[x[i] ][0] = i; ans = max (ans, a[1].val); } printf ("%lld", ans); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异