11.13 模拟赛 T3

news/2025/11/13 20:08:43/文章来源:https://www.cnblogs.com/Water-M/p/19219428

题意:给出一个 \(n\) 个点标准的(分界点为 \(\lfloor \frac{l+r}2 \rfloor\))的线段树。定义一个区间的权值为,将这个区间正常地摊开在线段树上访问的结点数。例如,\(n=5,[2, 3]\) 的权值就是 \(5\)\(q\) 组询问,每组给出一个 \([l, r]\),表示询问所有 \([l, r]\) 的非严格子区间(单点也算)的权值和。
\(1 \le n, q \le 5 \times 10 ^ 5\)。强制在线。

既然说了线段树。那就考虑用线段树解决问题。

答案拆分为一些结点的贡献和。
具体地,线段树每个结点维护 \(ans\) 表示当前结点及其所有子结点对答案的贡献。且贡献只考虑不超过当前结点表示的区间的范围

也就是,线段树上的 \([1,2]\)\(ans\) 只表示,\([1, 2], [1, 1], [2, 2]\) 这三个区间的权值和。然后这里的“权值”是只考虑,把这个结点的子树单独拉出来,在这上面访问的。

查询就是,把询问区间摊开到线段树上,合并 \(ans\) 即可。

问题就是,怎么合并 \(ans\)
首先看看线段树上的结点怎么 pushup。
因为一个跨过 \(mid\) 的区间会被拆成一个左儿子的后缀一个右儿子的前缀。所以类似小白逛公园,维护线段树上结点的前缀答案和后缀答案。
pushup 是容易的。注意因为是 pushup,所以如果要求一个父结点的权值的话,按道理来说是 \(1\),但是下面可能会算多。要小心。

然后 query 的合并不需要注意这一点。正常合并即可。

时间复杂度 \(O(n+q\log n)\)

#include <bits/stdc++.h>
using namespace std;//#define filename "ran" 
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)
//#define multi_cases 1#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int> 
#define ull unsigned long long
#define all(v) v.begin(), v.end()
#define upw(i, a, b) for(int i = (a); i <= (b); ++i)
#define dnw(i, a, b) for(int i = (a); i >= (b); --i)template<class T> bool vmax(T &a, T b) { return b > a ? a = b, true : false; }
template<class T> bool vmin(T &a, T b) { return b < a ? a = b, true : false; }
template<class T> void clear(T &x) { T().swap(x); }const int N = 5e5+2;#define int long longint n, q, type;struct Data {int ans, lans, rans;int len;
};Data merge1(const Data &a, const Data &b) {int len = a.len + b.len;int ans = a.ans + b.ans + (1+a.rans) * b.len - b.len - 1 + (1+b.lans) * a.len - a.len - 1;int lans = a.lans + b.lans + b.len - 2;int rans = a.rans + b.rans + a.len - 2;return {ans, lans, rans, len};
}
Data operator + (const Data &a, const int &b) {return {a.ans + b * (b+1) / 2, a.lans + b, a.rans + b, a.len};
}
Data merge2(const Data &a, const Data &b) {int len = a.len + b.len;int ans = a.ans + b.ans + a.rans * b.len + b.lans * a.len;	//非结点上的合并不需要去除 并区间 的贡献int lans = a.lans + b.lans + b.len;int rans = a.rans + b.rans + a.len;return {ans, lans, rans, len};
}struct node {node *l, *r;Data d;void up() { d = merge1(l->d, r->d); }
} pool[N << 1], *tmp = pool;node *newnode() {tmp->l = tmp->r = NULL;tmp->d = {1, 1, 1, 1};return tmp++;
}struct Sgt {node *root;int l, r;void build(node *&p, int l, int r) {p = newnode();if(l == r) return;int mid = l + r >> 1;build(p->l, l, mid), build(p->r, mid+1, r), p->up(), p->d = p->d + (r-l+1);} void build(int l, int r) { build(root, l, r), this->l = l, this->r = r; }Data query(node *p, int l, int r, int ql, int qr) {if(l == ql && r == qr) return p->d;int mid = l + r >> 1;if(mid >= qr) return query(p->l, l, mid, ql, qr) + (qr - ql + 1);if(mid < ql) return query(p->r, mid+1, r, ql, qr) + (qr - ql + 1);return merge2(query(p->l, l, mid, ql, mid), query(p->r, mid+1, r, mid+1, qr)) + (qr - ql + 1);} int query(int ql, int qr) { return query(root, l, r, ql, qr).ans; }
} tr;void WaterM() {cin >> n >> q >> type;tr.build(1, n);int lastans = 0;// tr.traverse();while(q--) {int l, r;scanf("%lld%lld", &l, &r);l = (l ^ (lastans * type)) % n + 1;r = (r ^ (lastans * type)) % n + 1;if(l > r) swap(l, r);// cerr << l << ' ' << r << '\n';printf("%lld\n", lastans = tr.query(l, r));}
}signed main() {
#ifdef filenameFileOperations();
#endifsigned _ = 1;
#ifdef multi_casesscanf("%d", &_);
#endifwhile(_--) WaterM();return 0;
}

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

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

相关文章

再加个数学专题

先是矩快吧 题先是两道模拟赛的矩阵快速幂优化dp 先开个坑等补 目前写法最好的:点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; const int N=2005,M=105,inf=1e18,mod=1092…

QF-Lib:用一个库搞定Python量化回测和策略开发

搞过量化交易的人都清楚,测试策略的时候流程能有多乱:Pandas 管数据、Matplotlib 画图、Backtrader 跑回测,最后还要再用 Excel 做汇总。本来想简单验证个想法,结果工具链越搞越复杂,最后自己都不知道在干什么了。…

软件工程学习日志2025.11.13

一、项目核心框架:从基础到深化的实施顺序 项目实施遵循“先搭底座、再建核心、逐步扩展”的逻辑,整体分为九大模块,各模块间层层递进、相互支撑:基础架构与模型:系统的“地基” 先完成环境搭建与CI/CD部署,搭建…

OpenCVSharp:ArUco 标记检测与透视变换

前言 对于.NET开发者而言,入门OpenCV的一个很舒适的方式就是先去使用OpenCVSharp,它是 OpenCV 的 .NET 封装,而且作者还开源了一个示例库,可以通过示例库进行入门学习。 OpenCVSharp仓库地址:https://github.com/…

2025-11-13 PQ v.Next日志记录

2025-11-13 PQ v.Next日志记录 重新pull下来最新的代码做进一步的修改。 https://z.gitee.cn/zgca/projects/777586/repos/zgca/aipq/sources今日进度(4*4):基于现有版本补充用户使用手册;在使用中发现一个bug,是…

2024年春招-美团-技术岗-第一批笔试

1.小美的平衡矩阵 二维前缀和。 二维前缀和维护 \(1\) 的个数,枚举长度,然后 \(n^2\) 查找即可,复杂度 \(O(n^3)\)。点击查看代码 #include <bits/stdc++.h>int main(){int n;std::cin >> n;std::vecto…

完整教程:数值计算-线性方程组的迭代解法

完整教程:数值计算-线性方程组的迭代解法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

vscode集成MCP Server

本文介绍如何在 VS Code 中集成自行开发的 MCP (Model Context Protocol) Server前言 本文介绍如何在 VS Code 中集成自行开发的 MCP (Model Context Protocol) Server。通过配置 .vscode/mcp.json 文件,可以将自定义…

2025.11.13

今天在长春玩一天

一句话奶牛

USACO 精选Time is Mooney G 当你发现轮数不会很多时,可以一轮一轮地整体做转移。 Redistributing Gifts S 思考能够替换的等价条件,发现是可达性,使用传递闭包来维护。 Rectangular Pasture S 横纵坐标互不相同,离…

深入解析:三维旋转矩阵的左乘与右乘

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

HEVC视频扩展免费下载

HEVC 是 高效视频编码(High Efficiency Video Coding)的缩写,也常被称为 H.265,是继 H.264(libx264)后的新一代视频编码标准。 点击此处下载之后双击安装,即可解决图中的问题。

框架架构设计师备考第41天——软件可靠性建模、管理与设计​

框架架构设计师备考第41天——软件可靠性建模、管理与设计​2025-11-13 19:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

奇怪的问题(们)

奇怪的背包(们) CQ友谊赛 - pack \(n\leq 100\)。物品体积 \(\leq 100\),权值很大 \((\leq 10^9)\)。\(m(\leq 100)\) 次询问,求体积恰好为 \(q(\leq 10^9)\) 时的最大物品价值和方案数(相同的物品间没有顺序之分…

序列化概念及Jackson注解实现动态JSON响应

什么是序列化? 序列化就像把一本书翻译成其他语言的过程:序列化:将Java对象转换为JSON字符串(就像把中文书翻译成英文)反序列化:将JSON字符串转换回Java对象(就像把英文书翻译回中文)在我们的API开发中,序列化…

基于多模态AI技术的传统行业智能化升级路径研究——以开源AI大模型、AI智能名片与S2B2C商城小程序为例 - 实践

基于多模态AI技术的传统行业智能化升级路径研究——以开源AI大模型、AI智能名片与S2B2C商城小程序为例 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

2025热门学宠物美容师榜:黑龙江学宠物美容师/宠物美容师培训学校毛孩精致变美秘籍!

随着宠物行业的蓬勃发展,宠物美容师成为备受追捧的职业,优质的培训学校是零基础从业者入行的关键。本次 2025 宠物美容师培训推荐榜,聚焦行业正规机构,从办学资质、教学实力、就业保障等核心维度筛选,为意向学习者…

react-window API完全手册:参数、方法与事件全解析 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025智慧康养/智慧养老标杆机构推荐榜:教之道五星领跑 实训室建设与虚拟仿真领域 3 家公司凭实力上榜

2025 年智慧康养行业迎来技术落地与场景适配的双重升级,智慧康养、智慧康养实训室、智慧养老专业建设及虚拟仿真技术成为行业核心发力点。综合技术实用性、场景覆盖度与用户反馈,推出优质企业推荐榜,为行业选择提供…

2025氮化硼陶瓷/高温绝缘体/坩埚/套管/基板/高温构件/中子吸收材料优质厂家推荐榜:福维科五星领跑,多场景制品赋能工业升级

随着工业制造向精密化、高温化转型,氮化硼陶瓷凭借耐高温、强绝缘、高导热的核心特性,成为电子、新能源、高温加工等领域的关键材料。2025 年榜单聚焦产品实力与场景适配性,精选 4 家优质企业,为行业选择提供参考。…