hdu1540/poj2892 线段数区间合并

HDU - 1540

POJ - 2892 

题意:n个点,有3种操作D a表示摧毁a这个点,R 表示修复上一个点,Q x表示查询x所在的区间没被摧毁的连续最大区间

思路:线段树区间合并,区间合并主要就是对lsum rsum 和sum的动态维护,注意合并的条件,写的时候主要注意push_up和push_down,还有对于不同的查询query的写法不一样,update和creat和普通的线段树差不多,这里查询x所在区间可行的最大区间,每一个节点(子树)可以知道的连续区间只有lsum[rt],rsum[rt] 和 rsum[lrt]+lsum[rrt] ,所以只能从这3个区间入手,每次判断x是否被某个连续的区间所覆盖即可

AC代码:

#include "iostream"
#include "string.h"
#include "stack"
#include "queue"
#include "string"
#include "vector"
#include "set"
#include "map"
#include "algorithm"
#include "stdio.h"
#include "math.h"
#pragma comment(linker, "/STACK:102400000,102400000")
#define ll long long
#define endl ("\n")
#define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
#define mem(a,x) memset(a,x,sizeof(a))
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define ft (frist)
#define sd (second)
#define lrt (rt<<1)
#define rrt (rt<<1|1)
#define len (r-l+1)
using namespace std;
const long long INF = 1e18+1LL;
const int inf = 1e9+1e8;
const int N=1e5+100;
const ll mod=1e9+7;int n,sum[N<<1],lsum[N<<1],rsum[N<<1],lazy[N<<1];
void push_up(int rt, int m){int rm=m>>1, lm=m-rm;lsum[rt]=lsum[lrt], rsum[rt]=rsum[rrt];if(lsum[rt]==lm){lsum[rt]+=lsum[rrt];}if(rsum[rt]==rm){rsum[rt]+=rsum[lrt];}sum[rt]=max(sum[lrt],sum[rrt]);sum[rt]=max(sum[rt],rsum[lrt]+lsum[rrt]);
}void push_down(int rt, int m){int rm=m>>1, lm=m-rm;if(lazy[rt]==0){lm=rm=0;}sum[lrt]=lsum[lrt]=rsum[lrt]=lm;sum[rrt]=lsum[rrt]=rsum[rrt]=rm;lazy[lrt]=lazy[rrt]=lazy[rt];lazy[rt]=-1;
}void creat(int rt, int l, int r){if(l==r){sum[rt]=lsum[rt]=rsum[rt]=1;return;}lazy[rt]=-1;int mid=l+r>>1;creat(lrt,l,mid);creat(rrt,mid+1,r);push_up(rt, len);
}void update(int rt, int l, int r, int L, int R, int v){if(l>=L && r<=R){int m=len;lazy[rt]=v;if(!v) m=0; //cout<<m<<endl;sum[rt]=lsum[rt]=rsum[rt]=m;return;}if(lazy[rt]!=-1) push_down(rt, len);int mid=l+r>>1;if(L<=mid) update(lrt, l, mid, L, R, v);if(R>mid) update(rrt, mid+1, r, L, R, v);push_up(rt, len);
}int query(int rt, int l, int r, int x){if(l==r) return sum[rt];if(lazy[rt]!=-1) push_down(rt, len);int mid=l+r>>1;if(lsum[rt]>=x) return lsum[rt];else if(n-rsum[rt]+1<=x) return rsum[rt];else if(mid-rsum[lrt]+1<=x && mid+lsum[rrt] >=x ) return rsum[lrt]+lsum[rrt];else if(x<=mid) return query(lrt, l, mid, x);else return query(rrt, mid+1, r, x);
}int main(){//ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);char c;int x,m;while(cin>>n>>m){creat(1,1,n);int l=0, d[N];while(m--){cin>>c;if(c=='R'){x=d[l--];update(1,1,n,x,x,1);}else{cin>>x;if(c=='D'){d[++l]=x;update(1,1,n,x,x,0);}else{cout<<query(1,1,n,x)<<endl;}}}}return 0;
}

 

转载于:https://www.cnblogs.com/max88888888/p/7271434.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的交通灯控制设计

课程设计任务书及成绩 课程名称 单片机课程设计 题目 交通灯控制设计 课程设计目标与任务、计划与进度安排: 实践教学要求与任务: 1、了解交通灯的基本工作原理&#xff1b; 2、用Proteus模拟实现交通灯控制&#xff1b; 3、用Keil C51编程实现上述功能&#xff1b; 4、…

福斯i6飞行模式设置_数据网络卡的时候,不妨试试“开关飞行模式”?上网速度明显变快...

相信大家都有过这种经历&#xff0c;手机数据网速很慢的时候&#xff0c;开一下飞行模式再关闭&#xff0c;上网速度会比之前快很多&#xff0c;这就有人有了疑问&#xff0c;为什么呢&#xff1f;开飞行模式再关掉飞行模式&#xff0c;其实等于是完成了一次手动的小区重选。移…

安装开源 ITIL 门户 iTOP

在 CentOS 7 上部署iTOP是一个简单的基于Web的开源IT服务管理工具。它有所有的ITIL功能&#xff0c;包括服务台、配置管理、事件管理、问题管理、变更管理和服务管理。iTOP依赖于Apache/IIS、MySQL和PHP&#xff0c;因此它可以运行在任何支持这些软件的操作系统中。因为iTOP是一…

基于FPGA 的8b10b编解码电路前端电路设计

基于FPGA 的8b10b编解码电路前端电路设计 摘 要 本设计是采用EDA技术设计的一种8B /10B 编解码电路,实现了在高速的串行数据传输中的直流平衡。该编解码电路设计大体上可以由五个模块构成&#xff0c;分别是默认编码模块、差异度计算模块、编码校正模块、并串转换模块、显示模…

day15(mysql 的多表查询,事务)

mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起&#xff01; /*创建表t1*/ CREATE TABLE t1(a INT PRIMARY KEY ,b VARCHAR(10) ) INSERT INTO t1 VALUES(1,a); INSERT INTO t1 VALUES(2,b); INSERT INTO t1 VALUES(3,c); /*创建t2*/…

vue router传参_新手使用vue-router传参时注意事项

1. 使用name和params组合传参this.$router.push({name: details, params: {id: 233}})路由配置import Vue from vueimport Router from vue-router Vue.use(Router) export default new Router({ mode: history, routes: [ { path: /details, name: details, component: resolv…

FFMpeg分析详细分析

与其说是分析&#xff0c;不如说是学习&#xff0c;只是看在自己第一次写系列文章的份上&#xff0c;给足自己面子&#xff0c;取个有"深度"的题目&#xff01;如有人被题目所蒙骗进来&#xff0c;还望见谅&#xff01; URLProtocol,URLContext和ByteIOContext是FFMp…

《jQuery基础》总结

目前&#xff0c;互联网上最好的jQuery入门教材&#xff0c;是Rebecca Murphey写的《jQuery基础》&#xff08;jQuery Fundamentals&#xff09;。这本书虽然是入门教材&#xff0c;但也足足有100多页。我对它做了一个详细的笔记&#xff0c;试图理清jQuery的设计思想&#xff…

逻辑综合工具DesignCompiler使用教程

逻辑综合工具Design Compiler使用教程 图形界面design vision操作示例 逻辑综合主要是将HDL语言描述的电路转换为工艺库器件构成的网表的过程。综合工具目前比较主流的是synopsys公司Design Compiler&#xff0c;我们在设计实践过程中采用这一工具。Design compiler有两种工作…

遍历结构体_三菱ST语言编程(3)——结构体变量

上篇文章介绍了数组&#xff0c;是一组相同类型数据的列表&#xff0c;那么不同类型的数据能否组合到一起用一个标签表示呢&#xff1f;答案当然是可以的&#xff0c;而实现这个功能的就是结构体(struct)。建立结构体在三菱结构化编程的界面中左侧程序部件里可以找到结构体标签…

关于微信小程序swiper的问题

关于小程序swiper的问题 代码 在官方示例上给swiper添加了currentbindchangecircular添加了一个buttonbindtap用于切换下一张 index.wxml <swiper indicator-dots"{{indicatorDots}}"bindchange"swiperChange"current"{{index}}"circular&quo…

PyQt5案例汇总(完整版)

个人博客点这里 PyQt5案例汇总(完整版) 起步 PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。 Qt库是一套最有用的GUI库。 PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主…

中的 隐藏鼠标菜单_Mac移动隐藏删除顶部菜单栏图标教程

苹果菜单栏贯穿 Mac 的屏幕顶部。左侧是苹果菜单和应用菜单&#xff0c;应用菜单一般显示你当前使用的Mac软件的所有功能菜单。右侧通常是以图标显示的状态菜单&#xff0c;帮助你快速查看Mac的状态以及快速访问某些Mac软件。移动图标位置若想要重新排列状态菜单栏的图标&#…

可以用什么代替平面镜

答案是镜面 潜望镜是利用平面镜来改变光路转载于:https://www.cnblogs.com/lidepeng/p/7280593.html

[hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)

spoon.bat 启动kettle。 测试数据 1. 新建转换 输入中选择文本文件输入 双击设置文本输入 字符集、分隔符设置 获取对应的字段&#xff0c;预览记录。 拖入 excel输出&#xff0c;设置转换关系 设置输出路径 获取字段 启动转换 导入的excel数据&#xff08;设置好格式,图中ID,A…

ffmpeg提取音频播放器总结

ffmpeg提取音频播放器总结&#xff1b; 一&#xff1a;简介 从编写音频播放器代码到完成播放器编写&#xff0c;测试&#xff0c;整整5天的时间&#xff0c;这时间还不算之前对 ffmpeg熟悉的时间&#xff0c;可以说是历经千辛万苦&#xff0c;终于搞出来了&#xff0c;虽然最…

【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie

我们观察数据&#xff1a;树套树 PASS 主席树 PASS 一层一个Trie PASS 再看&#xff0c;异或&#xff01;我们就把目光暂时定在01Tire然后我们发现&#xff0c;我们可以带着一堆点在01Trie上行走&#xff0c;因为O(n*q*30m*30)是一个可选复杂度。 我们想一下我们正常的时候…

Docker学习笔记——Java及Tomcat Dockerfile

1、Java Dockerfile创建项目目录java&#xff0c;目录下上传所需java版本压缩包&#xff0c;并创建Dockerfile文件&#xff0c;项目结构如下&#xff1a;java-Dockerfile-jdk-8u111-linux-x64.gzDockerfile内容&#xff1a;# JAVA # Version 1.8.0_111 # SOURCE_IMAGE FROM cen…

rabbitmq接口异常函数方法_RabbitMQ监控(三):监控队列状态

#RabbitMQ 监控(三)验证RabbitMQ健康运行只是确保消息通信架构可靠性的一部分&#xff0c;同时&#xff0c;你也需要确保消息通信结构配置没有遭受意外修改&#xff0c;从而避免应用消息丢失。RabbitMQ Management HTTP API提供了一个方法允许你查看任何vhost上的任何队列&…

FFMpeg语法参数中文参考手册

要查看你的ff mpeg支持哪些 格式&#xff0c;可以用如下命令&#xff1a;$ ffmpeg -formats | less还可以把 视频文件导出成jpg序列帧&#xff1a;$ ffmpeg -i bc-cinematic-en.avi example.%d.jpgdebian下安装ffmpeg很简单&#xff1a;&#xff03;apt-get install ffmpegffmp…