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

【HDU】Tunnel Warfare 树状数组+二分 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 Problem Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plai 阅读详情

Tunnel Warfare

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

 

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

Source

POJ Monthly

 有注释应该好理解,如果是对线段树的区间合并一无所知的童鞋,你先看看这个博客(这个人挺牛的):

 https://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html

#include <bits/stdc++.h>
#define root 1,n,1
#define lc rt<<1
#define rc rt<<1|1
#define mid ((l+r)>>1)
#define lson l,mid,lc
#define rson mid+1,r,rc
using namespace std;
const int maxn=50000+10;
int lsum[maxn<<2],rsum[maxn<<2];
void build(int l,int r,int rt)
{
    lsum[rt]=rsum[rt]=r-l+1;
    if(l==r) return;
    build(lson);
    build(rson);
}
void update(int l,int r,int rt,int c,int f)
{
    if(l==r){
        if(f) lsum[rt]=rsum[rt]=0;
        else lsum[rt]=rsum[rt]=1;
        return;
    }
    if(c<=mid) update(lson,c,f);
    else update(rson,c,f);
    int len=r-l+1;
    lsum[rt]=lsum[lc];
    rsum[rt]=rsum[rc];
    if(lsum[rt]==len-(len>>1)) lsum[rt]+=lsum[rc];
    if(rsum[rt]==(len>>1)) rsum[rt]+=rsum[lc];
}
int query(int l,int r,int rt,int c)
{
    if(l==r) return lsum[rt];
    int ans=-1;
    if(l<=c&&c<=l+lsum[rt]-1) ans=lsum[rt];//如果在最左连续
    if(r-rsum[rt]+1<=c&&c<=r) ans=max(ans,rsum[rt]);//如果在最右连续
    //如果在横跨连续,右边界限不要写成mid+lsum[rc]-1,因为右区间是从mid+1开始的所以要加一(这地方找了许久,尴尬)
    if(mid-rsum[lc]+1<=c&&c<=mid+lsum[rc]) ans=max(ans,lsum[rc]+rsum[lc]);
    if(ans!=-1) return ans;//若有返回最大的,否则再去找更小区间
    if(c<=mid) return query(lson,c);
    else return query(rson,c);
}
int main ()
{
    int n,m,x;
    while(~scanf("%d%d",&n,&m))
    {
        int st[maxn],k=0;
        build(root);
        while(m--){
            char s[2];
            scanf("%s",s);
            if(s[0]=='D'){
                scanf("%d",&x);
                st[k++]=x;
                update(root,x,1);
            }else if(s[0]=='Q'){
                scanf("%d",&x);
                printf("%d\n",query(root,x));
            }
            else
                update(root,st[--k],0);
        }
    }
    return 0;
}

 

如何使用apifox打包测试用例生成测试套件自动化执行 使用apifox打包测试用例生成测试套件自动化执行 阅读详情

相关推荐

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一、简单介绍 二、Car Racing 2D (2D赛车) 游戏内容与操作 三、相关说明 四、游戏代码框架 五、知识点 六、游戏效果预览 七、实现步骤 八、工程源码地址 九、延伸扩展 一、简单介绍 Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便

仙魁XAN 7703

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

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

Lee_w_j__的博客 365

Python爬虫实战:抓取天气数据并生成可视化图表(完整可复制代码)

工具/库核心作用选型理由requests发送HTTP请求,获取天气网页内容语法简单,上手快,支持Headers配置(反爬)解析HTML页面,提取目标天气数据无需懂复杂XPath,API直观,快速定位标签pandas数据清洗、整理(如日期/温度格式化)一键处理数据格式,与matplotlib无缝适配matplotlib生成可视化图表(折线图/饼图/柱状图)Python主流可视化库,定制性强,支持保存高清图生成随机User-Agent,应对反爬自动更新UA池,避免手动维护。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 909

I - 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 tunnels lay in a line. Except t...

Ant_e_zz的博客 505

基于EtherCAT的AM402与SV660N、IS620N伺服运动控制实战指南

本文详细介绍了基于EtherCAT总线的汇川AM402 PLC与SV660N、IS620N伺服驱动器构建运动控制系统的完整实战流程。内容涵盖硬件平台搭建、软件组态、关键参数设置、InoProShop编程及调试技巧,旨在帮助工程师快速掌握这一高精度、高响应的工业自动化解决方案。

weixin_29204205的博客 401

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程

本文详细介绍了DolphinScheduler中僵尸任务的识别、诊断与修复全流程,包括数据库层面的SQL操作指南、系统恢复验证方法以及预防措施。针对任务状态异常问题,提供了从基础排查到高级源码分析的完整解决方案,帮助运维人员有效管理系统资源和工作流调度。

weixin_27966471的博客 133

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!荣耀之路! 9303

反光柱定位算法实战05:Cartographer Landmark融合定位——从原理到实战

本文介绍了CartographerLandmark融合定位方案,该方案将反光柱作为Landmark节点直接融入Cartographer后端优化框架,避免了传统双系统切换导致的位姿跳变问题。文章详细阐述了Landmark的核心原理、数据发布格式(包括ID、坐标、权重等关键字段)以及两种工作模式(建图模式和导航模式)。特别指出组合反光柱作为Landmark可提供方向参考,有效解决镜像歧义问题。该方案通过统一优化框架实现稳定定位,尤其适用于缺乏自然特征的环境,但存在ID匹配不稳定等局限性。整体而言,Cartogr

Studying…… 424

HDU - 1540 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 tunnels lay in a line. Ex

AC即性感 856

JavaScript实现量化交易策略(附完整源码)

JavaScript实现量化交易策略(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 721

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2023 FasterNet 高效快速的部分卷积块

本文记录的是基于FasterNet的YOLOv11轻量化改进方法研究。FasterNet的网络结构借鉴 CNN 的设计理念,通过提出的PConv减少推理时的计算和内存成本,同时减少通道数并增加部分比例,降低延迟,并通过后续的PWConv来弥补特征信息可能缺失的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和六种模型,以满足不同的需求。

Limiiiing的博客 2032

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

【沃顿商学院学习笔记】商业基础——Financing:05 名义利率和实际利率 APR& EAR

商业基础——名义利率和实际利率 本章主要是从名义利率和实际利率的相关概念和计算方法进行学习。 名义利率和实际利率 APR&amp;amp; EAR 根据下图可以直到: APR,QUOTED RATE在精算中又叫名义利率,比如一个房产贷款quoted rate or APR是12%,且按月复利,那么说明它的月实际利率是12%/12=1% EAR是effecive annual rate,在精算中叫实际利率,...

ECNU乐扣老师——区块链、可计算情感 1万+

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

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

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

Iguodala的博客 775

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

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

菜鸟成长ing 897

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 Tunnel Warfare(线段树+区间合并)

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

Falcon的博客 489

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的博客 220

HDU1540 Tunnel Warfare 线段树区间合并

HDU1540 Tunnel Warfare 线段树区间合并

qq_44919369的博客 180

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

hdu1540 Tunnel Warfare 线段树区间合并

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

EventQueue的博客 482

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

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

di6499的博客 138
上一篇: nyoj 460-项链
下一篇: hdu 5289 Assignment (四种解法)
也道长
博客等级 码龄9年 11粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值