Tunnel Warfare (HDU - 1540,这也能用线段树 ?!)

OpenSpec 从入门到精通:AI 时代的最佳 SDD 范式 同样都是「先写规范再写代码」的开源 SDD 框架,OpenSpec(https://github.com/fission-ai/openspec) 展现出了极高的工程性价比,无论是使用 Claude Code、Cursor 还是 Aider,都可以无缝接入 OpenSpec 的规格管理层。这些问题需要人来做判断,AI 做不了这个主。整个流程跑下来,OpenSpec 产出的效果还是令人满意的,一些前期没有考虑到的细节 AI 都补上了,生成的相关文档也有利于开发人员的知识对齐,可以尝试在团队内部推广。 阅读详情

一.题目链接:

HDU-1540

二.题目大意:

有 n 个村庄排列在一条线上,编号为 1 ~ n.

现有 3 种 m 次操作

D x:摧毁第 x 个村庄

Q x:查询与第 x 个村庄相邻的村庄数.

R:修复上一个被摧毁的村庄.

三.分析:

当查询与第 x 个村庄相邻的村庄数时

只需要查询在 1 ~ x 中被摧毁村庄的最大编号

&& 在 x ~ n 中被摧毁村庄的最小编号.

初始化时,将每个点的最大值赋值为 0,最小值赋值为 n + 1.

那么用线段树来储存就好了.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define pi acos(-1.0)
#define ll long long int
using namespace std;

const int M = (int)5e4;

struct node
{
    int l;
    int r;
    int Min;
    int Max;
} tree[M * 4 + 5];

int Min, Max;
stack <int> st;

void build(int k, int l, int r, int n)
{
    tree[k].l = l;
    tree[k].r = r;
    tree[k].Min = n + 1;
    tree[k].Max = 0;
    if(l == r)
        return;
    int mid = (l + r) / 2;
    build(k * 2, l, mid, n);
    build(k * 2 + 1, mid + 1, r, n);
}

void change(int k, int l, int r, int x, int n, bool flag)
{
    if(l == r && l == x)
    {
        if(!flag)
            tree[k].Max = tree[k].Min = x;
        else
        {
            tree[k].Max = 0;
            tree[k].Min = n + 1;
        }
        return;
    }
    int mid = (l + r) / 2;
    if(x <= mid)
        change(k * 2, l, mid, x, n, flag);
    else
        change(k * 2 + 1, mid + 1, r, x, n, flag);
    tree[k].Max = max(tree[k * 2].Max, tree[k * 2 + 1].Max);
    tree[k].Min = min(tree[k * 2].Min, tree[k * 2 + 1].Min);
}

void query1(int k, int l, int r, int x)
{
    if(tree[k].r <= x)
    {
        Max = max(Max, tree[k].Max);
        return;
    }
    int mid = (l + r) / 2;
    query1(k * 2, l, mid, x);
    if(mid < x)
        query1(k * 2 + 1, mid + 1, r, x);
}

void query2(int k, int l, int r, int x)
{
    if(tree[k].l >= x)
    {
        Min = min(Min, tree[k].Min);
        return;
    }
    if(l == r)
        return;
    int mid = (l + r) / 2;
    if(x <= mid)
        query2(k * 2, l, mid, x);
    query2(k * 2 + 1, mid + 1, r, x);
}

int main()
{
    int n, m;
    while(~scanf("%d %d", &n, &m))
    {
        while(!st.empty())
            st.pop();
        build(1, 1, n, n);
        while((m--) > 0)
        {
            getchar();
            char dir;
            scanf("%c", &dir);
            if(dir == 'D')
            {
                int x;
                scanf("%d", &x);
                change(1, 1, n, x, n, 0);
                st.push(x);
            }
            else if(dir == 'Q')
            {
                Min = n + 1;
                Max = 0;
                int x;
                scanf("%d", &x);
                query1(1, 1, n, x);
                query2(1, 1, n, x);
                if(Min == Max)
                    printf("0\n");
                else
                    printf("%d\n", Min - Max - 1);
            }
            else if(dir == 'R')
            {
                int x = st.top();
                st.pop();
                change(1, 1, n, x, n, 1);
            }
        }
    }
    return 0;
}

 

上位机 寻边器 通讯实战 寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系 阅读详情

相关推荐

CarMaker快速入门

本合集是小明师兄推出的CarMaker汽车仿真,CarMaker无论是传统动力学、动力系统开发、底盘系统开发还是目前智能驾驶辅助系统及智能驾驶系统开发有着非常重要的作用,可以有效节省开发周期和开发成本,基于仿真快速实现算法开发和系统验证。...

小明师兄的博客 1万+

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

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

m0_73843712的博客 220

nbiot和2g_浅谈NBIOT

一、什么是NBIOT?1、概念窄带物联网(Narrow Band Internet of Things, NB-IoT),NB-IoT构建于蜂窝网络,只消耗大约180KHz的带宽,使用License频段,可采取带内、保护带或独立载波等三种部署方式,与现有网络共存。可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。2、NBIOT的特点和目标(1)超强覆盖:相对GPRS来...

weixin_39534100的博客 1704

hdu 1540(线段树)

题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少。 线段树区间合并基础题。 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const...

crystal 334

Ubuntu22.04下3分钟搞定GitHub加速:SwitchHosts+小鱼工具保姆级配置指南

本文提供Ubuntu22.04下快速解决GitHub下载超时问题的保姆级教程,通过SwitchHosts图形化工具和小鱼一键换源工具实现高效加速。详细步骤包括环境准备、工具安装配置及验证方法,帮助开发者轻松优化GitHub访问速度,提升工作效率。

weixin_29258297的博客 564

异步bus交互(一)— 两级DFF同步器

异步bus交互(一)— 两级DFF同步器 跨时钟域处理 & 亚稳态处理 1.问题产生 现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工作在另一个时钟频率下,而普通的信号又会工作在另外的时钟频率下。这3个不同时钟频率下工作的信号往往需要相互沟通和传递信号。 不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者

qq_44816673的博客 5119

hdu1540(线段树求连续区间最大和)

题意: 最初1-2-3-…-n按照顺序每个点与相邻的和两点相连成一条链。 三种操作D: 毁掉x R: 恢复上次毁掉的 Q:查询与x直接相连或者间接相邻的数量(包括自己) 题目类型:线段树求区间连续最大和的模板题目 思路: 维护区间从左端点开始最大连续个数lsum, 以及当前区间从右端点开始最大连续的个数rsum。重点push_up()函数的写法。查询的时候 查看当前点是否在子区间的rsu

笔记 1701

【异常】claude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径

如果claude方式1(临时):使用完整路径运行,比如:# Windows 批处理脚本示例 C:\你的脚本目录\claude . bat # PowerShell 脚本示例 C:\你的脚本目录\claude . ps1方式2(永久):将脚本所在文件夹添加到系统 PATH 环境变量(参考场景1的环境变量配置步骤),之后即可直接输入claude运行。错误核心原因:系统 PATH 环境变量中找不到claude对应的可执行文件/脚本。

奶爸的编程之路,也就一周冷个三天 3669

HDU 1540 (线段树维护最长连续子区间 | 树状数组 + 二分)

HDU 1540 题意: 开始有1~n的完好的村庄,给你三种操作: D x 摧毁第x个村庄 R 恢复上一个摧毁的村庄 Q x 询问与x(包括自身)连接的完好村庄个数 思路: (1)线段树维护连续子区间。每个结点包含lsum和rsum,分别记录当前结点对应的区间 [L, R]的最长前缀连续区间长度和最长后缀连续区间长度。操作D、R对应单点更新,Q为区间查询,重点为线段树的区间合并。 (2)树状数组+二分。普通线段树常数太大,在本题中不断进行单点更新和查询,会TLE。树状数组+二分查找,二分寻找与点x连续的最远

qq_46667619的博客 373

AI编码规则:从提示工程到自动化,提升大模型生成代码质量

在软件工程领域,代码质量是保障软件可维护性、安全性和团队协作效率的核心。其背后遵循着从基础语法规范到架构设计原则的一系列工程实践。随着大语言模型(LLM)在代码生成任务中的广泛应用,如何确保AI生成的代码符合这些工程标准,成为一个关键的技术挑战。这涉及到将人类工程师积累的最佳实践,转化为机器可理解、可执行的明确约束。通过系统化的**编码规则**定义与集成,例如构建涵盖安全、风格、架构的多层次规则集,并将其融入**提示工程**或自动化工作流,可以显著引导AI产出更健壮、规范的代码。这种方法的价值在于,它能将模

weixin_42525189的博客 642

Qlib:微软开源的AI量化投资平台 极简入门快速上手教程:使用 Qlib 进行中芯国际股价回测和预测

Qlib是由微软开源的面向AI量化投资的工具包。它提供了构建量化投资模型所需的基础设施,旨在帮助研究者和从业人员更高效地进行量化研究和策略开发。

AI天才研究院 5411

Tunnel Warfare(线段树)

有三种操作,D是删点,Q是询问点x还和几个点连着,R是恢复最近一次被摧毁的点。对点x,连接着的点的个数显然是右边最近的一个被摧毁的点的坐标减去左边最近的一个点的坐标再减1,即右区间最小值-左区间最大值-1。因为有更新和查询操作,所以可以想到用线段树。 初始化每个点的最大值为0,最小值为n+1,点被删时,最大值最小值等于自己的坐标。 代码 这里要吐槽一下.

reisen.inaba的博客 425

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 130

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

HDU1540 Tunnel Warfare(线段树)

HDU1540 Tunnel Warfare 线段树求区间最小值,最大值。 #include <iostream> #include <vector> #include <queue> #include <cstring> #include <cstdio> #define inf 0x3f3f3f3f using namespace ...

weixin_44118043的博客 152

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

H - Tunnel Warfare HDU - 1540

H - Tunnel Warfare HDU - 1540 题意: n个数顺序排列,左右数相连, 现在有三个操作: 1.摧毁一个位置上的数 2.回复上一次摧毁的数 3.查询包含该位置的最长连续区间长度 题解: 有两个方法,第一个是区间的最大值-最小值-1,这个就不讲了 第二个方法是区间合并更新答案 参考文章 利用线段树 求出每个线段左端点长度lsum(自左端点向右的连续长度),右端点长度rsum(自右端点向左连续长度) 以及区间内最长连续长度sum(以为可能存在一个连续长度既不包含左端点也不包含右端点) 破

qq_35975367的博客 486

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【题解】HDU1540 Tunnel Warfare

传送门 题目大意就是说有n个村庄以及m个操作,这m个操作分别是: D x 毁坏一个编号为x的村庄 R 重建最后一个毁坏的村庄 Q x 询问编号为x的村庄直接或间接可以连接到的编号总数 虽说这道题是线段树区间合并的模板题,但使用平衡树(本人使用的是STL库中强大的集合容器set代替手写平衡树)亦为此题的一个经典做法。 我们分析一下,使用一个序列(用set维护)和一个栈维护被毁坏的村庄(使...

夕弦 390

HDU1540 Tunnel Warfare(线段树区间维护&求最长连续区间)题解

#include&lt;queue&gt; #include&lt;cstring&gt; #include&lt;set&gt; #include&lt;map&gt; #include&lt;stack&gt; #include&lt;cmath&gt; #include&lt;vector&gt; #include&lt;cstdio&gt; #include&lt;

努力,奋斗 392

hdu 1540 Tunnel Warfare(线段树)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少。 其实这题直接二分查找也可以,但用线段树可以练一练手。 大致思路就是找查询点最近的左右两个0的位置(0表示被摧毁的),然后输出区间大小即可,如果这个点已经被摧毁那么就没有 连续的区间...

awow80285的博客 107

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

Tunnel Warfare HDU 1540

Tunnel Warfare HDU 1540 Tunnel WarfareTunnel Warfare HDU 1540题目链接: [Tunnel Warfare](https://vjudge.net/problem/HDU-1540).大致题意解题思路难点解决方案总结 题目链接: Tunnel Warfare. 大致题意 有n个点排成一列,每个点与相邻的点互相连通。 现对区间【1,n】进行以下三种操作: 破坏点x的联通性 询问点x所处的最大连通区间的长度 恢复最后被破坏的点联通性 解题思路

Royen_的博客 1746

HDU - 1540 Tunnel Warfare

别人都说是线段树,可是好像可以用set直接做

The Blog Of Uncle_Sugar 302

HDU 1540 Tunnel Warfare(用set解决线段树中单点查询)

题目链接: HDU 1540 Tunnel Warfare 题意: 有nn个村庄,编号为1−−n1--n,相邻的村庄是直接连通的,村庄之间可以间接连通。 有mm个操作,分三种: ①DxD x 表示破坏村庄xx,也就是说xx无法其连通作用。 ②QxQ x表示查询村庄xx能连接到的最大村庄个数。 ③RR 表示修复上一次被破坏的村庄。 对每次查询输出结果。 分析: 参考博文链接

ramay7 444

hdu 1540 Tunnel Warfare(线段树)

题目链接:hdu 1540 Tunnel Warfare 题目大意:有连续的N个城镇,三种操作: D x:第x城镇被破坏Q x:插叙第x城镇所在联通块有多少个城镇没有被破坏R:修复最后一个被破坏的城镇 解题思路:线段树区间合并,每个城镇看成一个叶子节点,用一个vector记录破坏顺序。对于查询来说,每次只要判断是否在mid−R[lson(u)],mid+L[rson(u)]之间即

不慌不忙、不急不躁 1386

HDU1540 Tunnel Warfare(线段树:维护最大连续子串)

HDU1540 Tunnel Warfare(线段树:区间合并) http://acm.hdu.edu.cn/showproblem.php?pid=1540 分析:        首先先来分析题目中的3种操作: 1.D x: 该操作就是单点更新 2.Q x: 该操作可以分解为查区间[1,x]的最大连续0后缀长L和区间[x,n]的最大连续0前缀长R,则R+L-1即为所求.有关前缀查询和后

code 1851

HDU - 1540 Tunnel Warfare(线段树连续区间)

题目链接:HDU1540 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 l...

Chase的博客 349
上一篇: Can you answer these queries?( HDU - 4027,线段树 + 细节)
下一篇: Assign the task( HDU - 3974,DFS + 线段树)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值