当前位置: 首页 > news >正文

【蓝桥杯每日一题】推导部分和——带权并查集

推导部分和

2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集

题目大意

对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1,A2,,AN ,小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i = l r A i = A l + A l + 1 + ⋯ + A r \sum_{i=l}^r A_i = A_l + A_{l+1} + \cdots + A_r i=lrAi=Al+Al+1++Ar 是多少?

然而,小蓝并不知道数列中每个数的值是多少,他只知道它的 ( M ) 个部分和的值。其中第 ( i ) 个部分和是下标 l i l_i li r i r_i ri 的部分和 ∑ j = l i r i A j = A l i + A l i + 1 + ⋯ + A r i \sum_{j=l_i}^{r_i} A_j = A_{l_i} + A_{l_i+1} + \cdots + A_{r_i} j=liriAj=Ali+Ali+1++Ari,值是 S i S_i Si

解题思路

这个题的思维难度有点大,但是实现来很容易,只要理解带权并查集这一概念即可。

先看这个权值是怎么带上的,d 数组就是代表每一个值到根节点的一个距离,然而当 l 和 r在同一个连通块中的时候,之间的距离就是 d[r] - d[l-1] 的值。

每一个连通块代表着是那些可以通过边界值相连的区间的总和,在合并的过程中会发生如下图的数值变化,如图所示 d[l-1] 的值将会在find函数中通过更新父节点的时候更新成 l-1 到 根节点的距离,这时候显然l 和 r 之间的距离就是d[r] - d[l-1]

在这里插入图片描述

Accepted
#include <iostream>using namespace std;const int N = 100010;
typedef long long ll;
ll n,m,q;
ll d[N],p[N];ll find(int x) {if(p[x] != x) {int t = find(p[x]);d[x] += d[p[x]];p[x] = t;}return p[x];
}int main() {cin>>n>>m>>q;for(int i = 1;i <= n;i++) p[i] = i;ll l,r,s;while(m--) {cin>>l>>r>>s;ll pl = find(l-1),pr = find(r);// 直接合并p[pl] = pr;d[pl] = d[r] - d[l-1] - s;}while(q--) {cin>>l>>r;ll pl = find(l-1),pr = find(r);if(pl != pr) cout<<"UNKNOWN"<<endl;else cout<<d[r] - d[l-1]<<endl;}return 0;
}
思考

这个题的思维难度确实高,主要就是带权并查集的使用,得多想想。

备注

想要一起备赛的同学可以评论区留言!!!

http://www.lryc.cn/news/504171.html

相关文章:

  • Linux 磁盘满了怎么办?快速排查和清理方法
  • 【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)
  • 数据结构之链表笔试题详解
  • 结构化的Prompt
  • 【数字化】华为数字化转型架构蓝图
  • 最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南
  • go 跨平台打包
  • C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
  • 【树莓派4B】MindSpore lite 部署demo
  • Idea汉化插件Datagrip汉化插件
  • 精彩回顾|Cocos开发者沙龙长沙站
  • 算法日记 49 day 图论(A*算法)
  • 服务器批量清理redis keys,无法适用客户端必须直连的情况
  • Grafana配置告警规则推送企微机器人服务器资源告警
  • 数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
  • druid.properties图标是齿轮
  • 【图像处理】利用numpy、opencv、python实现车牌检测
  • ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
  • Android无障碍服务监听实现自动点击按钮
  • Deveco Studio首次编译项目初始化失败
  • Redis缓存应用场景【Redis场景上篇】
  • 线程与进程基础
  • electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题
  • OpenCV的简单练习
  • JAVA:建造者模式(Builder Pattern)的技术指南
  • 12.11函数 结构体 多文件编译
  • Debezium系列之:使用Debezium采集oceanbase数据库
  • VMware虚拟机 Ubuntu没有共享文件夹的问题
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用
  • 简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程