【洛谷P3273】棘手的操作

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案 根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。 阅读详情

由于 cnblogs 到 3 月 25 号前需要整改,无法写博客,所以这几天就暂时在 优快云 写,到时候再搬过去。

题目

题目链接:https://www.luogu.com.cn/problem/P3273
有 nnn 个节点,标号从 111 到 nnn,这 nnn 个节点一开始相互不连通。第 iii 个节点的初始权值为 a[i]a[i]a[i],接下来有如下一些操作:

  • U x y: 加一条边,连接第x个节点和第y个节点
  • A1 x v: 将第x个节点的权值增加v
  • A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v
  • A3 v: 将所有节点的权值都增加v
  • F1 x: 输出第x个节点当前的权值
  • F2 x: 输出第x个节点所在的连通块中,权值最大的节点的权值
  • F3: 输出所有节点中,权值最大的节点的权值

n,m≤3×105n,m\leq 3\times 10^5n,m≤3×105。

思路

这道题看着就很左偏树啊,但是由于操作太多容易写挂。
发现我们不能直接用线段树维护的原因是每次的连通块中的点标号可能并不连续,所以一次操作最坏复杂度是 O(nlog⁡n)O(n\log n)O(nlogn) 的。也就是说,如果我们可以调整点的编号,在两个连通块合并的时候,使得这两个连通块的编号也连续,那么就可以用线段树维护了。
如果我们只保留所有连通块第一次连接时的边,那么就会形成一棵树。每次将两棵树的树根连接起来,然后将每一个点重新编号为这棵树的 dfs 序,不难发现这样就可以满足每次离岸边所连接的两个连通块的编号是连续的。
然后再枚举一次所有操作用线段树维护一下就好了。
注意因为加入边的顺序是有要求的,邻接表会导致加入的边倒序,所以我采用了 vector 存边。
时间复杂度 O(mlog⁡n)O(m\log n)O(mlogn)。

代码

#include <bits/stdc++.h>
using namespace std;

const int N=300010,Inf=1e9;
int n,m,tot,X[N],Y[N],a[N],id[N],siz[N],father[N],head[N];
char opt[N][3];
bool vis[N];
vector<int> e[N];

int find(int x)
{
	return x==father[x]?x:father[x]=find(father[x]);
}

struct SegTree
{
	int maxn[N*4],lazy[N*4];
	
	void pushup(int x)
	{
		maxn[x]=max(maxn[x*2],maxn[x*2+1]);
	}
	
	void pushdown(int x)
	{
		if (lazy[x])
		{
			maxn[x*2]+=lazy[x]; maxn[x*2+1]+=lazy[x];
			lazy[x*2]+=lazy[x]; lazy[x*2+1]+=lazy[x];
			lazy[x]=0;
		}
	}
	
	void update(int x,int l,int r,int ql,int qr,int k)
	{
		if (ql<=l && qr>=r)
		{
			maxn[x]+=k; lazy[x]+=k;
			return;
		}
		pushdown(x);
		int mid=(l+r)>>1;
		if (ql<=mid) update(x*2,l,mid,ql,qr,k);
		if (qr>mid) update(x*2+1,mid+1,r,ql,qr,k);
		pushup(x);
	}
	
	int query(int x,int l,int r,int ql,int qr)
	{
		if (ql<=l && qr>=r) return maxn[x];
		pushdown(x);
		int mid=(l+r)>>1,res=-Inf;
		if (ql<=mid) res=max(res,query(x*2,l,mid,ql,qr));
		if (qr>mid) res=max(res,query(x*2+1,mid+1,r,ql,qr));
		return res;
	}
}seg;

void dfs(int x)
{
	id[x]=++tot; vis[x]=1;
	for (int i=0;i<e[x].size();i++)
		dfs(e[x][i]);
}

int main()
{
//	freopen("data.txt","r",stdin);
	memset(head,-1,sizeof(head));
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		father[i]=i;
	}
	scanf("%d",&m);
	for (int i=1;i<=m;i++)
	{
		scanf("%s",opt[i]);
		if (opt[i][0]=='U')
		{
			scanf("%d %d",&X[i],&Y[i]);
			int x=find(X[i]),y=find(Y[i]);
			if (x!=y)
			{
				if (x>y) swap(x,y);
				e[x].push_back(y); father[y]=x;
			}
		}
		if (opt[i][0]=='A' && opt[i][1]=='1') scanf("%d %d",&X[i],&Y[i]);
		if (opt[i][0]=='A' && opt[i][1]=='2') scanf("%d %d",&X[i],&Y[i]);
		if (opt[i][0]=='A' && opt[i][1]=='3') scanf("%d",&Y[i]);
		if (opt[i][0]=='F' && opt[i][1]=='1') scanf("%d",&X[i]);
		if (opt[i][0]=='F' && opt[i][1]=='2') scanf("%d",&X[i]);
	}
	tot=0;
	for (int i=1;i<=n;i++)
		if (!vis[i]) dfs(i);
	for (int i=1;i<=n;i++)
		seg.update(1,1,n,id[i],id[i],a[i]);
	for (int i=1;i<=n;i++)
		father[i]=i,siz[i]=1;
	for (int i=1;i<=m;i++)
	{
		if (opt[i][0]=='U')
		{
			int x=find(X[i]),y=find(Y[i]);
			if (x!=y)
			{
				if (x>y) swap(x,y);
				father[y]=x; siz[x]+=siz[y];
			}
		}
		if (opt[i][0]=='A' && opt[i][1]=='1')
			seg.update(1,1,n,id[X[i]],id[X[i]],Y[i]);
		if (opt[i][0]=='A' && opt[i][1]=='2')
		{
			int p=find(X[i]);
			seg.update(1,1,n,id[p],id[p]+siz[p]-1,Y[i]);
		}
		if (opt[i][0]=='A' && opt[i][1]=='3')
			seg.update(1,1,n,1,n,Y[i]);
		if (opt[i][0]=='F' && opt[i][1]=='1')
			printf("%d\n",seg.query(1,1,n,id[X[i]],id[X[i]]));
		if (opt[i][0]=='F' && opt[i][1]=='2')
		{
			int p=find(X[i]);
			printf("%d\n",seg.query(1,1,n,id[p],id[p]+siz[p]-1));
		}
		if (opt[i][0]=='F' && opt[i][1]=='3')
			printf("%d\n",seg.query(1,1,n,1,n));
	}
	return 0;
}
【YOLO26保姆级零踩坑教程】环境搭建+五大任务快速入门,一行代码实现检测/分割/姿态/OBB/分类(Win+Linux全适配) YOLO26环境搭建与实战指南:零踩坑全适配 本文是YOLO26全栈技术专栏的入门篇,提供Windows/Linux双系统的纯实战环境搭建指南,主打零踩坑、全适配。YOLO26基于Ultralytics框架优化,无需编译源码或手动下载权重,原生支持多任务推理。 环境配置关键点: 必须安装Ultralytics 8.4.0及以上版本 支持CPU/GPU环境,推荐Python 3.8-3.11 提供清华源配置解决下载慢问题 安装步骤: CPU版:一键安装Ultralytics和OpenCV GPU版:匹配CUD 阅读详情

相关推荐

在游戏开发中如何使用Unity3D引擎开发麻将游戏

总体来说使用Unity3D引擎开发麻将游戏需要开发人员熟练掌握Unity3D的各种功能和API,并且需要深入了解麻将游戏的规则和背景,以便实现一个质量高、玩法丰富的游戏。在测试的过程中我们需要检查游戏是否符合规则,保证游戏逻辑的正确性,并检查游戏的UI是否和设计图一致,保证游戏的可玩性。Unity3D引擎是一个高度集成的游戏开发工具,可以为开发人员提供很多强大的工具和功能,包括3D建模、物理模拟、粒子系统、动画等等,在游戏开发中可以提高开发效率和游戏质量。在开始开发之前我们需要明确游戏的需求和功能。

a272857154的专栏 1889

2019.01.17 bzoj2333: [SCOI2011]棘手的操作(启发式合并)

传送门 启发式合并菜题。 题意:支持与连通块有关的几种操作。 要求支持连边,单点修改,连通块修改,全局修改和单点查值,连通块查最大值和全局最大值。 我们对每个连通块和答案用可删堆维护最大值,然后用启发式合并来解决连边的问题。 关键在于连通块修改,这个可以给每个连通块维护一个标记,然后在合并的时候每个数记得修改值就行了。 代码 #include&lt...

weixin_30915275的博客 152

六维力传感器选型指南:电阻式vs电容式,哪个更适合你的工业场景?

本文深入解析六维力传感器在工业自动化中的选型要点,重点对比电阻式与电容式传感器的核心原理、环境适应性及成本结构。针对不同工业场景(如高精度装配、重载机器人等),提供专业选型建议,帮助工程师优化系统性能与经济效益。

weixin_42525005的博客 395

BZOJ 2333 棘手的操作(离线+线段树+带权并查集)

这题搞了我一天啊。。。拍不出错原来是因为极限数据就RE了啊,竟然返回WA啊。我的线段树要开8倍才能过啊。。。 首先可以发现除了那个加边操作,其他的操作有点像线段树啊。如果我们把每次询问的联通块都放在一个区间的话,那么就可以用线段树维护了啊。 于是我们只需要用带权并查集把联通块串成一条链的形式。就可以用区间表示出来了啊。。 # include &lt;cstdio...

weixin_30879833的博客 158

从零到一:3D-ResNet50在医学影像中的实战陷阱与避坑指南

本文深入探讨了3D-ResNet50在医学影像分类中的实战应用,重点解析了NIFTI数据预处理、小样本迁移学习陷阱及GPU显存优化等关键问题。通过分块加载、混合精度训练等技巧,有效解决了医学影像处理中的内存管理和性能挑战,为开发者提供了实用的避坑指南和优化策略。

weixin_29038345的博客 390

如何安装最新版本的 SAP ABAP Development Tool ( ADT ) ,并且能够随时升级

下载链接:https://tools.hana.ondemand.com/#abap 首先安装 Eclipse IDE for Java Developers 找到适合自己操作系统的 Eclipse 安装包: 安装之后,打开Eclipse: Install -&gt; New Softwares, 输入 url:https://tools.hana.ondemand.com/latest 全部安装: 安装完毕之后,新建一个 ABAP Project,本地 SAP GUI 里添加的系统,会自动带出来:

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4280

[SCOI2011]棘手的操作

Description   有NNN个节点,标号从111到NNN,这NNN个节点一开始相互不连通。第i个节点的初始权值为a[i]a[i]a[i],接下来有如下一些操作:   UUU xxx yyy: 加一条边,连接第xxx个节点和第yyy个节点   A1A1A1 xxx vvv: 将第xxx个节点的权值增加vvv   A2A2A2 xxx vvv: 将第xxx个节点所在的连通块的所有节点的...

Free Cat~~~ 跳动的喵 445

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5981

【SCOI2011 Day2】棘手的操作

问题描述 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权值增加v A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v A3 v: 将所有节点的权值都增加v F1 x: 输出第x个节点当前的权值 F2 x: 输出第x个节...

include / Hdhd 267

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

【AI编程】2025年16款主流AI编程工具全维度测评及选型指南

2025年16款主流AI编程工具全维度测评及选型指南

funfan的博客 1万+

[模拟赛]棘手的操作

这道题是HugeGun出的一道题(据说是他改编的,bzoj2333) 但原题很毒瘤啊,有负数,他说正解是堆套堆Orz。 作为什么也不会的蒟蒻,看到这个瞬间想到带权冰茶集(点权)。。。 (汪神说他写的是火茶集2333) 一开始开一个数组,表示这个点和他的子孙将要被加上的值(因为觉得像lazy思想,所以起名lazy) 对于修改所有结点,可以用一个变量来存取,输出时加上即可,对...

weixin_30856725的博客 147

C#winform自定义绘制曲线控件实例

本文实例讲解自定义绘制曲线控件过程。 在实际项目中,需要绘制曲线,系统的提供的绘制曲线的控件有时不能满足自己的需要,需要根据项目需要定制开发曲线控件。 实例目标,实时绘制显示温湿度值曲线。

qq_30725967的博客 1734

洛谷P3273 [SCOI2011]棘手的操作

题目描述有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权值增加vA2 x v: 将第x个节点所在的连通块的所有节点的权值都增加vA3 v: 将所有节点的权值都增加vF1 x: 输出第x个节点当前的权值F2 x: 输出第x个节点所在的连通块中,权值最大的节点的...

蒟蒻的博客 299

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]

  题目传送门 棘手的操作 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权值增加v A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v A3 v: 将所有节点的权值都增加v F1 x: 输出第x个节点当前的权...

weixin_30312659的博客 133

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

P3273-[SCOI2011]棘手的操作【线段树,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3273 题目大意 nnn个点有权值,要求支持操作 连接两个点 单点加权 联通块加权 全图加权 单点询问 联通块询问最大值 全图询问最大值 解题思路 把所有可能产生的联通块都变到一个区间里就好了 考虑怎么排这个东西,可以先离线,每次加边的时候连接两个联通块根,这样跑出来的dfsdfsdfs序就是符合要求的。 注意因为邻接表是按照加边的顺序倒着枚举的,所以要反过来加边。 然后用线段树直接维护答案就好了 时间复杂度O(n

QuantAsk 348

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

P3273 [SCOI2011] 棘手的操作

该死的,就不应该对栈内元素进行删除操作的,直接往上或往下移还好操作,删掉元素再插入直接裂开,各种“指针”的操作复杂到爆。本来是想改成上移和下移操作的,但是当时改完之后因为其他原因报错了,而我还不知道。而且这题用线段树是更优解,但是也能用左偏树(可并堆)来做,我就拿来练手了。里面就有栈元素的上移和下移(本来栈就应该这么搞的)没打草稿开始做的,脑子一片浆糊,直接0分。又要加一个栈记录最大值,重写代码。刚开始思路就错了,只能拿50分。又debug,拿到80分。心力交瘁,暂时止步于此。

Fool256353的博客 406

洛谷.3273.[SCOI2011]棘手的操作(左偏树)

题目链接 还是80分,不是很懂。 /* 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数)(它可能成为这一个堆的根,所以也要从t2中删除再插入) 3.整个连通块加:根节点打标记(从t2中删除,改数,再插入到t2) 4.所有节点加:全局标记 5.输出某个点的值:向上加上所有父节点...

weixin_30824479的博客 141

bzoj2333: [SCOI2011]棘手的操作 线段树+离线

网上都是可并堆在线搞,其实直接离线处理处每个联通块,然后把他们放一起,然后点更新,区间询问就可以了。 #include #include #include #include using namespace std; #define INF 100000000 #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #define get

IED98的专栏 1593

BZOJ2333: [SCOI2011]棘手的操作

Description 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: Uxy:加一条边,连接第x个节点和第y个节点 A1xv:将第x个节点的权值增加v A2xv:将第x个节点所在的连通块的所有节点的权值都增加v A3v:将所有节点的权值都增加v F1x:输出第x个节点当前的权值 F...

weixin_30552635的博客 128

bzoj 2333: [SCOI2011]棘手的操作(线段树+离线操作,可并堆+set)

2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1554  Solved: 588 [Submit][Status][Discuss] Description 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y:

clover_hxy的博客 824

BZOJ 2333: [SCOI2011]棘手的操作

题目地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 题目大意:对于一幅图支持7种操作(详见原题)。 算法讨论:         通过U x y、F2 x和F3操作,我们发现题目既要求最大值又要支持合并操作,我们可以想到用可并堆进行维护。         可并堆?如果你愿意的话显然配对堆和Fibonacci堆是很

Charlie Pan's Blog 3195

[可并堆] BZOJ 2333 [SCOI2011]棘手的操作

诶,脑子不好使了 一道裸题调了一晚上... #include #include #include #include #include using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000

雯舞 580

【洛谷P4997】不围棋【并查集】【模拟】

题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4997 「不围棋」是一种非常有趣的棋类游戏。 大家都知道,围棋的「气」是指一个棋子所在的联通块相邻的空格。两粒棋如果在棋盘上线段的两端就认为是相邻的,也就是在同一个连通块里。比如在图中,白子为四个独立的连通块,黑子构成一个连通块,绿色点是黑子连通块唯一的「气」: 「提子」是指将没有「气」的棋子提...

stoorz 5083

【洛谷P3631】方格染色

题目 题目链接:https://www.luogu.com.cn/problem/P3631 Sam 和他的妹妹 Sara 有一个包含 n×mn \times mn×m 个方格的表格。他们想要将其中的每个方格都染成红色或蓝色。出于个人喜好,他们想要表格中每个 2×22 \times 22×2 的方形区域都包含奇数个( 111 个或 333 个)红色方格。例如,下面是一个合法的表格染色方案(R 代表红色,B 代表蓝色): B B R B R R B B B B R R B R B 可是昨天晚上,有人已经给表

stoorz 999

【洛谷P5651】基础最短路练习题【dfs】【并查集】

题目: 给定nnn个点mmm条边的无向简单联通图GGG,边有边权。保证没有重边和自环。 定义一条简单路径的权值为路径上所有边边权的异或和。 保证GGG中不存在简单环使得边权异或和不为0。 QQQ次询问xxx到yyy的最短简单路径。 思路: 题目保证了每一个简单环的异或和均为0。也就是说对于环上的任意两点(x,y)(x,y)(x,y),从x→yx\to yx→y的两条路径的权值相等。 所以对于每一...

stoorz 704
上一篇: 换博客辣
下一篇: 【洛谷P4280】逆序对
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值