2026.1.22 模拟赛 T2 补题记录

news/2026/1/22 15:02:20/文章来源:https://www.cnblogs.com/Sktn0089/p/19517277

我怎么这么菜。原题

考场做法是对 \(a\) 猫树分治,然后把 \(a_l, a_{l + 1}, \dots, a_r\)\(b\) 中出现的数在 \(b\) 中的位置拎出来,做扫描线,用线段树求答案。

这个做法是 \(2\log\) 的,考虑如何优化。

事实上仔细观察后,发现分治和线段树都是无法避免的。

这里比较 Educational 了:考虑在 \(x\)\(y\) 中找到带权中点,可以发现答案一定至少经过其中一个序列的带权中点,想一下容易证明正确性。

那么就可以将猫树分治的 \((l, r, mid)\) 改成 \([1, n]\) 以及带权中点,且总共只用做两次扫描线。


对于最优化问题(即使是 data structure 题),应该想到还能对决策范围进行 扩大 / 缩小,有时候会产生奇效。


点击查看代码
#include <bits/stdc++.h>
#define ll int
#define LL long long
#define pb push_back
#define pir pair <ll, ll>
#define mkp make_pair
#define fi first
#define se second
#define i128 __int128
using namespace std;
template <class T>
void rd(T &x) {char ch; bool f = 0;while(!isdigit(ch = getchar()))if(ch == '-') f = 1;x = ch - '0';while(isdigit(ch = getchar()))x = (x << 1) + (x << 3) + ch - '0';if(f) x = -x;
}
const ll maxn = 5e5 + 10, M = 1e6, inf = 1e9 + 5, mod = 1e9 + 7, iv = mod - mod / 2;
const LL INF = 1e18 + 5;
ll power(ll a, ll b = mod - 2, ll p = mod) {ll s = 1;while(b) {if(b & 1) s = 1ll * s * a % p;a = 1ll * a * a % p, b >>= 1;} return s;
}
template <class T1, class T2>
void add(T1 &x, const T2 y) { x = x + y >= mod? x + y - mod : x + y; }
template <class T1, class T2>
void sub(T1 &x, const T2 y) { x = x < y? x + mod - y : x - y; }
template <class T1, class T2>
ll pls(const T1 x, const T2 y) { return x + y >= mod? x + y - mod : x + y; }
template <class T1, class T2>
ll mus(const T1 x, const T2 y) { return x < y? x + mod - y : x - y; }
template <class T1, class T2>
void chkmin(T1 &a, const T2 b) { a = a < b? a : b; }
template <class T1, class T2>
void chkmax(T1 &a, const T2 b) { a = a < b? b : a; }ll n, m, a[maxn], wa[maxn], b[maxn], wb[maxn];
ll posa[maxn << 1], posb[maxn << 1], h[maxn << 1], ht;
LL sa[maxn], sb[maxn];
struct ANSWER { LL w; ll l1, r1, l2, r2; void upd(LL a, ll b, ll c, ll d, ll e) {if(w < a) w = a, l1 = b, r1 = c, l2 = d, r2 = e; } } ans;ll L;
struct SGT {pair <LL, ll> mx[maxn << 2]; LL tag[maxn << 2];void addtag(ll p, LL v) { mx[p].fi += v, tag[p] += v; }void pushup(ll p) {mx[p] = max(mx[p << 1], mx[p << 1|1]);mx[p].fi += tag[p];}void modify(ll l, ll r, LL v) {addtag(l |= L, v);if((r |= L) ^ l) addtag(r, v);while(1) {ll x = l >> 1, y = r >> 1;if(x == y) break;if(l & 1 ^ 1) addtag(l ^ 1, v);if(r & 1) addtag(r ^ 1, v);pushup(l = x), pushup(r = y);}for(ll u = l >> 1; u; u >>= 1) pushup(u);}void build() {for(ll i = 1; i <= m; i++) mx[L | i] = mkp(-INF, i), tag[i] = 0;for(ll i = m + 1; i < L; i++) mx[L | i] = mkp(-INF, -INF), tag[i] = 0;mx[L] = mkp(-INF, -INF), tag[L] = 0;for(ll i = L - 1; i; i--) mx[i] = max(mx[i << 1], mx[i << 1|1]), tag[i] = 0;}
} tr;
ll stk1[maxn], top1, stk2[maxn], top2, ex1[maxn], ex2[maxn];
LL ep1[maxn], ep2[maxn];void push1(ll i, ll x, LL t) {while(top1 && ex1[top1] > x)tr.modify(stk1[top1 - 1] + 1, stk1[top1], t - ep1[top1]), --top1;stk1[++top1] = i, ep1[top1] = t, ex1[top1] = x;
}
void push2(ll i, ll x, LL t) {while(top2 && ex2[top2] < x)tr.modify(stk2[top2 - 1] + 1, stk2[top2], t - ep2[top2]), --top2;stk2[++top2] = i, ep2[top2] = t, ex2[top2] = x;
}void solve(ll z) {ll mid = 1;while(sa[n] >= 2 * sa[mid]) ++mid;L = 1, top1 = top2 = 0;while(L <= m) L <<= 1;tr.build();for(ll i = 1; i <= m; i++) {ll c = b[i]; LL w = 0;if(!posa[c]) push1(i, n, sa[n] - sa[mid]), push2(i, 1, sa[mid]), w = sa[n];else if(posa[c] > mid) {push1(i, posa[c] - 1, sa[posa[c] - 1] - sa[mid]);push2(i, 1, sa[mid]);w = sa[posa[c] - 1];} else {push1(i, n, sa[n] - sa[mid]);push2(i, posa[c] + 1, sa[mid] - sa[posa[c]]);w = sa[n] - sa[posa[c]];}tr.modify(i, i, w + INF - sb[i - 1]);auto tmp = tr.mx[1];ll pos1 = lower_bound(stk1 + 1, stk1 + 1 + top1, tmp.se) - stk1;ll pos2 = lower_bound(stk2 + 1, stk2 + 1 + top2, tmp.se) - stk2;if(!z) ans.upd(sb[i] + tmp.fi, ex2[pos2], ex1[pos1], tmp.se, i);else ans.upd(sb[i] + tmp.fi, tmp.se, i, ex2[pos2], ex1[pos1]);}
}int main() {rd(n), rd(m);for(ll i = 1; i <= n; i++) rd(a[i]), h[++ht] = a[i];for(ll i = 1; i <= n; i++) rd(wa[i]), sa[i] = sa[i - 1] + wa[i];for(ll i = 1; i <= m; i++) rd(b[i]), h[++ht] = b[i];for(ll i = 1; i <= m; i++) rd(wb[i]), sb[i] = sb[i - 1] + wb[i];sort(h + 1, h + 1 + ht);ht = unique(h + 1, h + 1 + ht) - h - 1;for(ll i = 1; i <= n; i++) {a[i] = lower_bound(h + 1, h + 1 + ht, a[i]) - h;posa[a[i]] = i;}for(ll i = 1; i <= m; i++) {b[i] = lower_bound(h + 1, h + 1 + ht, b[i]) - h;posb[b[i]] = i;}ans.upd(sa[n], 1, n, 0, 0), ans.upd(sb[m], 0, 0, 1, m);solve(0);for(ll i = 1; i <= ht; i++) swap(posa[i], posb[i]);swap(a, b), swap(n, m), swap(sa, sb), swap(wa, wb);solve(1);printf("%lld\n%d %d\n%d %d\n", ans.w, ans.l1, ans.r1, ans.l2, ans.r2);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年南通铜轴瓦厂推荐,雪龙铜制品如何解决用户适配性差痛点

在工业制造的精密世界里,铜轴瓦作为设备传动系统的关节软骨,其品质直接决定了机械运行的稳定性与使用寿命。面对市场上良莠不齐的铜轴瓦厂商,如何挑选到既能适配复杂工况、又能保障长期稳定供应的优质合作伙伴?以下…

2026年健身教练培训机构排名权威榜单及择校指南

随着健身行业规范化发展,专业教练需求稳步上升,选择优质培训机构是入行或进阶的关键。靠谱的机构能提供系统课程与权威认证,助力从业者快速立足。本文结合行业口碑与教学实力,精选5家机构,从核心维度拆解,为不同…

自适应夹爪品牌推荐:协作机器人的最佳拍档

在智能制造迈向柔性化、精密化与智能化的2026年,“自适应夹爪品牌如何选”已成为3C电子、新能源、半导体及汽车制造等行业采购决策的关键议题。传统气动夹爪因响应慢、力控粗、集成难,已难以满足现代产线对微米级操作…

滚丝轮有哪些品牌?一份涵盖国产与进口滚丝轮代理商的知名品牌清单

随着全球制造业向数字化、高精尖方向转型,作为金属成型加工核心部件的滚丝轮,其市场地位日益凸显。根据国际模具及五金塑胶产业供应商协会(IMDPA)发布的《2026全球金属紧固件加工设备市场预测报告》显示,预计到20…

分享时尚新颖翡翠手镯款式,如何选择适合自己的?

问题1:高品质翡翠手镯的核心判断标准是什么?天迹缘时尚玉手镯在这些方面有何优势? 高品质翡翠手镯的判断需兼顾材质本质与工艺价值两大维度:首先是玉料的种水色工瑕——种水决定通透度与温润感,颜色需均匀浓郁,工…

盘点短期内可前往的外贸展会,2026宁波星程中小工厂展排行如何?

本榜单依托全维度市场需求调研与真实参展口碑,深度筛选出五家能精准匹配外贸企业拓客需求的展会服务平台,为中小工厂及采购商选型提供客观依据,助力高效对接适配的商贸资源伙伴。 TOP1 推荐:宁波星程展览有限公司 …

自适应夹爪品牌怎么选?这个品牌值得推荐

在智能制造加速演进的2026年,“自适应夹爪品牌怎么选”已成为3C电子、半导体、新能源及汽车制造企业推进自动化升级的核心议题。面对高精密、多品种、小批量的柔性生产需求,传统气动夹爪已难以满足对力控精度、重复定…

2026年当下比较好的卧式暗装风机盘管门店有哪些,空气幕/消防排烟风机/吊顶式空调机组,卧式暗装风机盘管厂家推荐排行榜

随着建筑节能与智能化需求的升级,卧式暗装风机盘管作为中央空调系统的核心组件,其技术迭代与市场细分趋势愈发明显。2026年,行业呈现“技术驱动+场景适配”双轮发展格局,头部企业通过全链条服务能力、定制化解决方…

三指电爪哪个牌子好?选购指南与推荐

三指电爪哪个牌子好?这是当前3C电子、半导体、新能源及汽车制造等行业自动化升级过程中普遍关注的核心问题。随着工业机器人对柔性、精密和智能化执行器需求的激增,三指电爪品牌推荐成为工程师选型的重要参考。在众多…

人工智能之数据分析 Pandas:第五章 文件处理 - 教程

人工智能之数据分析 Pandas:第五章 文件处理 - 教程2026-01-22 14:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

Web自动化测试-如何生成高质量的测试报告?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 运行了所有测试用例&#xff0c;控制台输入的结果&#xff0c;如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。 web自动化测试实战之…

学完网络安全出去能做什么工作?(非常详细)零基础入门到精通,收藏这一篇就够了

学完网络安全出去能做什么工作&#xff1f;&#xff08;非常详细&#xff09;零基础入门到精通&#xff0c;收藏这一篇就够了 想要了解学完网络安全工程师就业班后&#xff0c;出去能做什么工作&#xff0c;这个时候会分甲方或是乙方&#xff0c;看个人更偏向哪个岗位。 甲方…

PH电极选购终极指南:从国产品牌到国际排名,谁才是高精度与在线的性价比之王?

在水质监测、化工生产、食品加工、实验室分析等核心场景中,PH电极作为测量溶液酸碱度的“核心传感器”,其精度、稳定性与适配性直接决定了数据可靠性与生产安全性。面对市场上琳琅满目的国际大牌与崛起的国产品牌,如…

昭通市昭阳鲁甸巧家盐津大关英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

在全球化留学热潮下,雅思考试已成为昭通市昭阳、鲁甸、巧家、盐津、大关等区域学子通往海外名校的重要通行证,但本地雅思考生普遍面临诸多备考困境:零基础入门无方向、单项卡分难以突破、优质培训资源匮乏、留学规划…

类似谷歌搜索文献:高效文献检索与获取方案探讨

做科研的第一道坎&#xff0c;往往不是做实验&#xff0c;也不是写论文&#xff0c;而是——找文献。 很多新手科研小白会陷入一个怪圈&#xff1a;在知网、Google Scholar 上不断换关键词&#xff0c;结果要么信息过载&#xff0c;要么完全抓不到重点。今天分享几个长期使用的…

北京地区top10研究生留学机构,反馈及时,服务高效可靠

北京地区top10研究生留学机构,反馈及时,服务高效可靠一。、如何在北京筛选高效可靠的研究生留学机构2026年1月10日,许多计划攻读硕士学位的北京学子,正面临着选择留学服务机构的难题。大家的痛点通常集中在几个方面…

性能测试、负载测试、压力测试之间的区别

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff…

基于ai搜索文献的高效文献检索方法与应用研究

做科研的第一道坎&#xff0c;往往不是做实验&#xff0c;也不是写论文&#xff0c;而是——找文献。 很多新手科研小白会陷入一个怪圈&#xff1a;在知网、Google Scholar 上不断换关键词&#xff0c;结果要么信息过载&#xff0c;要么完全抓不到重点。今天分享几个长期使用的…

【实战项目】 基于金融数据的投资决策可视化研究

运行效果:https://lunwen.yeel.cn/view.php?id=5948 基于金融数据的投资决策可视化研究摘要:随着金融市场的不断发展,投资决策的复杂性日益增加。为了提高投资决策的效率和准确性,本文以金融数据为基础,对投资决…

广州地区研究生留学中介口碑排名揭晓,无隐形消费备受青睐

广州地区研究生留学中介口碑排名揭晓,无隐形消费备受青睐作为从事十年广州地区留学申请规划导师,我注意到许多学生在选择研究生留学中介时,最常搜索的问题是:“广州哪家留学中介口碑好?”、“如何避免隐形消费?”…