hdu1540 Tunnel Warfare 线段树区间合并

【Chisel】2.4 时序逻辑 2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路 阅读详情

Tunnel Warfare

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6565    Accepted Submission(s): 2527


Problem Description
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was directly connected with two neighboring ones.

Frequently the invaders launched attack on some of the villages and destroyed the parts of tunnels in them. The Eighth Route Army commanders requested the latest connection state of the tunnels and villages. If some villages are severely isolated, restoration of connection must be done immediately!
 

Input
The first line of the input contains two positive integers n and m (n, m ≤ 50,000) indicating the number of villages and events. Each of the next m lines describes an event.

There are three different events described in different format shown below:

D x: The x-th village was destroyed.

Q x: The Army commands requested the number of villages that x-th village was directly or indirectly connected with including itself.

R: The village destroyed last was rebuilt.
 

Output
Output the answer to each of the Army commanders’ request in order on a separate line.
 

Sample Input
7 9 D 3 D 6 D 5 Q 4 Q 5 R Q 4 R Q 4
 

Sample Output
1 0 2 4
 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
#include <algorithm>

#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1

using namespace std;

const int maxn = 50000 + 10;

int msum[maxn << 2], lsum[maxn << 2], rsum[maxn << 2];

void PushUp(int rt, int m) {
	lsum[rt] = lsum[rt << 1];
	rsum[rt] = rsum[rt << 1 | 1];

	//若左区间左连续满了,就还要考虑右区间的
	if (lsum[rt << 1] == m - (m >> 1)) {
		lsum[rt] += lsum[rt << 1 | 1];
	}

	//同上
	if (rsum[rt << 1 | 1] == (m >> 1)) {
		rsum[rt] += rsum[rt << 1];
	}

	//当前区间的最大连续长度在左右区间和跨区间的区间三个中找
	msum[rt] = max(rsum[rt << 1] + lsum[rt << 1 | 1], max(msum[rt << 1], msum[rt << 1 | 1]));
}

void build(int l, int r, int rt) {
	msum[rt] = lsum[rt] = rsum[rt] = r - l + 1;
	if (l == r) return;
	int m = (l + r) >> 1;
	build(lson);
	build(rson);
}

//c为1的时候是恢复操作,c为0的时候是毁灭
void update(int x, int c, int l, int r, int rt) {
	if (l == r) {
		msum[rt] = lsum[rt] = rsum[rt] = c;
		return;
	}
	int m = (l + r) >> 1;
	if (x <= m) {
		update(x, c, lson);
	}
	else {
		update(x, c, rson);
	}
	PushUp(rt, r - l + 1);
}

int query(int x, int l, int r, int rt) {
	//到根节点或者区间最大连续长度为0,或者区间满直接返回
	if (l == r || msum[rt] == 0 || msum[rt] == r - l + 1) {
		return msum[rt];
	}
	int m = (l + r) >> 1;
	if (x <= m) {
		//查询的点在左区间的右连续区间范围内,就还要考虑右区间
		if (x >= m - rsum[rt << 1] + 1) {
			return query(x, lson) + query(m + 1, rson); //注意是m + 1,即右区间左端点
		}
		else {
			//否则只考虑左区间就行了
			return query(x, lson);
		}
	}
	else {
		//同上
		if (x <= (m + 1) + lsum[rt << 1 | 1] - 1) {
			return query(x, rson) + query(m, lson);  //注意是m,即左区间右端点
		}
		else {
			return query(x, rson);
		}
	}
}

int main()
{
	int n, m, x;
	char op[2];
	while (~scanf("%d%d", &n, &m)) {
		build(1, n, 1);
		stack<int> s;
		while (m--) {
			scanf("%s", op);
			if (op[0] == 'D') {
				scanf("%d", &x);
				s.push(x);
				update(x, 0, 1, n, 1);
			}
			else if (op[0] == 'Q') {
				scanf("%d", &x);
				printf("%d\n", query(x, 1, n, 1));
			}
			else {
				if (!s.empty()) {
					x = s.top(); s.pop();
					update(x, 1, 1, n, 1);
				}
			}
		}
	}
	return 0;
}





OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台 **企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。 阅读详情

相关推荐

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 266

HDU1540 Tunnel Warfare(线段树区间合并)

HDU1540  Tunnel Warfare(线段树区间合并)During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by...

GYH0730的博客 605

MATLAB与STK互联23:卫星对象操作(14)—仿真分析案例1,建立8个地面站,分析对卫星的可见性

学习到这里,我们有必要做个仿真分析案例,把之前我们学习的零散知识点串起来,看一下在真实的分析中怎么应用。 分析要求:建立8个地面站,分析每个地面站对某个轨道高度500km、倾角60°圆轨道的卫星,1天内的可见次数、可见弧长以及可见弧段间隔列表。 基本约束:地面站仰角8°~90°,作用距离<2000km,太阳矢量与地面站到卫星视线夹角不小于15°,可见弧段应大于30s。地面站站址可随机生成,但要求在南北纬50°范围内。 下面上代码: uiap = actxserver(‘STK11.application’)

ltylty001的博客 7490

hdu 1540 Tunnel Warfare 【线段树 区间合并】

Tunnel WarfareTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description During the War of Resistance Against Japan, tunnel warfare was carried out exten

lh的博客 421

高光谱知识(1)-高光谱成像技术的理解

系列文章目录 高光谱技术可以获得待观测目标或场景的连续单色光谱图像,并通过空间维(x, y)数据和光谱维(λ)数据共同组成三维观测数据立方体,从而为研究人员提供探测目标或场景中的每一个点的空间和光谱特征细节。这种兼具相机的高分辨成像能力和光谱仪的高光谱分辨能力使得高光谱被广泛应用于测绘遥感、目标识别、环境监测与评估、临床影像诊断、过程监控等任务中,并在地理、空间、海洋、气候、大气、农业、植被、生态、医药、安防、制造与色度等多个领域中发挥巨大作用。 文章目录系列文章目录前言一、按获取数据的过程划分二、按照光

Echo_Code的博客 1万+

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 356

hdu1540 Tunnel Warfare(线段树区间合并详解)

http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:给你一些村庄,D代表毁灭该村,R代表恢复该村,Q代表和x村相连的未被毁灭的村庄。 前两者明显就是单点更新了,查询的时用到了区间合并。 区间合并果然麻烦,连想带懂几乎花了我将近三天,不过好在做掉了。 思路:注释都在代码里了,适合入门。总的来说,增加了三个域ls, r

Iguodala的博客 774

用友BIP培训资料-设计采购订单新增API接口开发

14.在子实体的String pkMeas = order_hhrSlave0VOJson.getString("pk_meas");Openapi路径:nccloud/api/pu/order_hhrmanage/order_hhrMaster/addAggOrder_hhrMasterVO。实现接口的开发部署,通过openAPI的test类,实现一条数据的插入。16.进入自己的Idea打开老师发的TestOpenApi并且编译完成后如下。12.编写检测是否字段中是否含有中文的方法。

m0_68497879的博客 1542

HDU-1540-Tunnel Warfare(线段树单点修改,区间合并)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:给出n个村庄,m次操作,操作分为三种:D,Q,R D:炸毁pos位置的村庄。Q查询pos位置的村庄最多的联系村庄。R修好最近一个被炸毁的村庄 思路:线段树区间合并入门题。对于炸毁和修复的,将该点更新状态,维护区间左连续,右连续和中间连续合即可。 ACCode: #inclu...

永远鲜红の幼月的博客 207

AgentScope 2.0 扩展开发完全指南:从中间件到模型适配器的深度实践

本文系统讲解 AgentScope 2.0 框架的五大扩展机制,涵盖中间件系统的洋葱模型与钩子设计、ChatModelBase 基类与多供应商适配器开发、工作空间(本地/Docker/E2B)的抽象接口与生命周期管理、凭据工厂与 MCP 协议集成、以及工具协议与存储后端扩展。文中提供完整的架构图、代码示例与故障排查指南,帮助开发者快速掌握 AgentScope 的插件化扩展体系。

program哲学 291

【社招算法经验贴】算法社招记录

总的来说,也是收获了七七八八的offer,给的涨幅40~100%,职级有的可以对标到 p7(但阿里p7是真难a,a不动)。面了一圈下来,感觉大模型也在收缩hc。尤其是多模态相关hc。凭着上学期间做过相关视觉的work和paper,社招虽然能进面试,但是hc少得可怜,多模态已死慎入。还有大模型应用算法给的涨幅,跟搜广推的涨幅差别不大。真正能几百万往上的是基座pretrain/后训练/infra,但是全靠social和conn,hc极少。

Danger的博客 976

hdu1540-Tunnel Warfare 线段树区间合并

Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9013    Accepted Submission(s): 3479 Problem Description During the

wangheng 353

虚拟化 之三 详解 ARM 平台 jailhouse 的移植适配、构建及使用(飞腾派)

本文将探索学习通过在飞腾官方提供的 Buildroot 构建系统移植适配 openEuler 内核以及 jailhouse 源码 Package 进而直接构建一个适用于飞腾派开发板的带有 jailhouse 的 openEuler 发行版。

技术干货 1000

HDU-1540 Tunnel Warfare 线段树 区间合并

http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:  给出直线上一系列的村庄,如果相邻村庄都没有被破坏,  则两村庄是连接的,题目给出一系列的破坏操作,对指定号码的村庄进行破坏,  还有一系列的询问操作,询问与指定号码的村庄直接相连或间接相连的村庄有几个,  还有一个修复操作,是对最后破坏的村庄进行修复。  //线段树 定义三

菜鸟成长ing 896

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDU1540:Tunnel Warfare(线段树区间合并)

Problem Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels la

ACM!荣耀之路! 9302

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU - 1540 Tunnel Warfare(线段树+区间合并)

题目链接:点击查看 题目大意:给定n个村庄,初始化全部连接为一条直线,需要依次执行m个操作,D表示摧毁第i个村庄的连接,R表示恢复最后一 个被摧毁的村庄的连接,Q表示询问包括本身在内,与第i个村庄相连接的有多少个村庄(间接连接也算) 题目分析:这个题需要用到区间合并的思想,并且用线段树来实现,应该算是个裸题了,把pushup的板子套进线段树里就OK, 不过这个题的query函数比较难写,我...

Falcon的博客 488

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Tunnel Warfare HDU - 1540 线段树区间合并

During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except t...

why932346109的博客 194

hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】

Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) 链接:hdu 1540        POJ 2892 Problem Description  During the War of Resistance Against Jap

Fighting! 2366

HDU 1540 Tunnel Warfare/线段树区间合并

这个他配了图,很快就看懂了

m0_73843712的博客 219

HDU1540 Tunnel Warfare 线段树区间合并

HDU1540 Tunnel Warfare 线段树区间合并

htrdchh的博客 152

Tunnel Warfare(HDU1540+线段树+区间合并)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目: 题意:总共有n个村庄,有q次操作,每次操作分为摧毁一座村庄,修复一座村庄,和查询与询问的村庄相连接的城市数量。 思路:线段树+区间合并。 代码实现如下: 1 #include <set> 2 #include <map> ...

di6499的博客 138

HDU - 1540 Tunnel Warfare(线段树 - 区间合并)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:给你n个村庄和m此操作,操作分三种 (1)摧毁一个村庄; (2)重建一个村庄; (3)查询村庄x左右一公有多少个连续的村庄没有被摧毁 思路:这个是线段树区间合并的一道题,设ml数组记录的是这个区间内左区间向右可以到达的最大的距离,mr数组记录的是这个区间内右区间向左可以到达的最大的距离,每...

qq_43423395的博客 165

HDU 1540 Tunnel Warfare(线段树区间合并)

Tunnel Warfare 题意:有nnn个村庄,如果对于村庄iii和jjj都存在,那么我们就称其关系为连续,然后会有三个操作: D&amp;ThickSpace;&amp;ThickSpace;XD\;\;XDX摧毁第XXX个村庄。 Q&amp;ThickSpace;&amp;ThickSpace;XQ\;\;XQX询问包含村庄XXX的最大连续村庄的长度。 R&amp;ThickSpace;...

Eternally831143的博客 307

HDU1540 Tunnel Warfare【线段树区间合并、平衡树】

题目链接 题意 有一段连续的序列[1,2,3,...,n][1,2,3,...,n][1,2,3,...,n],有3种操作 删除数字 KKK,KKK的两边断开 询问数字 KKK 所在的连续段的长度(若KKK被删除则长度为0) 回撤上一次删除操作 题解 有两种做法 线段树区间合并,记录区间的最长左连续段长度和最长右连续段长度 平衡树记录删除的结点,询问的答案就是 KKK的后继-前驱-1 #include<iostream> #include<sstream> #include&

qq_50554695的博客 190

hdu 1540 & poj 2892 Tunnel Warfare 线段树区间合并

基础线段树区间合并,详见代码 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1,

uuuuuu 488

HDU 1540 - Tunnel Warfare(线段树区间合并)

Tunnel WarfareTimeLimit: 4000/2000 MS (Java/Others)    Memory Limit:65536/32768 K (Java/Others)Total Submission(s): 10244    Accepted Submission(s): 4023ProblemDescriptionDuring the War of Resistance ...

Change the world by program. 282
上一篇: hdu1203 I NEED A OFFER! 01背包
下一篇: hdu4717 The Moving Points 三分求函数最小值
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值