题意:一个hotel,有n间连续的房间,现在有m组操作:
type 1: '1, a, b': 第a个房间起的b个房间有旅客入住。
type 2: '2, a, b': 第a个房间起的b个房间的旅客离开。
type 3: '3': 问最长的连续空房间有多少间。
思路:线段树。这道题很好的利用线段树递归的性质,加深了对线段树递归的理解。复习了一下延迟的操作,学会了与延迟操作相反的操作,即利用递归,在递归回来的时候,由于左右子结点性质的改变,即时对父结点信息进行相应的更改,这个要注意。
代码如下:
#include<iostream>
using namespace std;
const int Max = 16005;
struct
{
int l, r;
int lma, ma, rma; // lma为这个区间左边的最长连续空房间的数量。
int cover; //‘1’表示这个区间的房间全住人,‘-1’表示全空,‘0’表示有空用住。
}node[3*Max];
int max(int a, int b)
{
return a > b ? a : b;
}
void BuildTree(int left, int right, int u)
{ // 建树。
node[u].l = left;
node[u].r = right;
if(left == right)
return;
int mid = (left + right)>>1;
BuildTree(left, mid, u<<1);
BuildTree(mid+1, right, (u<<1)+1);
}
void getdown(int u, int op)
{ // 延迟的操作。
node[u].cover = 0;
node[u<<1].cover = op;
node[(u<<1)+1].cover = op;
if(op == 1)
{
node[u<<1].lma = 0;
node[u<<1].ma = 0;
node[u<<1].rma = 0;
node[(u<<1)+1].lma = 0;
node[(u<<1)+1].ma = 0;
node[(u<<1)+1].rma = 0;
}
else
{
int len;
len = node[u<<1].r - node[u<<1].l + 1;
node[u<<1].lma = len;
node[u<<1].ma = len;
node[u<<1].rma = len;
len = node[(u<<1)+1].r - node[(u<<1)+1].l + 1;
node[(u<<1)+1].lma = len;
node[(u<<1)+1].ma = len;
node[(u<<1)+1].rma = len;
}
}
void updata(int left, int right, int op, int u)
{ // 修改。
if(left <= node[u].l && right >= node[u].r)
{
node[u].cover = op;
if(op == 1)
node[u].lma = node[u].ma = node[u].rma = 0;
else
{
int len = node[u].r - node[u].l + 1;
node[u].lma = node[u].ma = node[u].rma = len;
}
return;
}
if(node[u].cover == op)
return;
if(node[u].cover == -op)
getdown(u, -op);
if(right <= node[u<<1].r)
updata(left, right, op, u<<1);
else if(left >= node[(u<<1)+1].l)
updata(left, right, op, (u<<1)+1);
else
{
updata(left, right, op, u<<1);
updata(left, right, op, (u<<1)+1);
}
// *很好运用递归,由左右子结点的信息,对父结点的三个连续区间最大值进行相应的更改。
if(node[u<<1].cover == -1) // 求父结点的lma。
node[u].lma = node[u<<1].ma + node[(u<<1)+1].lma;
else
node[u].lma = node[u<<1].lma;
if(node[(u<<1)+1].cover == -1) // 求父结点的rma。
node[u].rma = node[(u<<1)+1].ma + node[u<<1].rma;
else
node[u].rma = node[(u<<1)+1].rma;
int a = node[u<<1].rma + node[(u<<1)+1].lma; // 求父结点的ma。
int b = max(node[u<<1].ma, node[(u<<1)+1].ma);
int c = max(node[u].lma, node[u].rma);
node[u].ma = max(max(a, b), c);
// *递归回来的时候,由于左右子结点性质的改变,必须对父结点信息进行相应的更改,WA在了这里。
if(node[u<<1].cover == node[(u<<1)+1].cover)
node[u].cover = node[u<<1].cover;
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
BuildTree(1, n, 1);
node[1].cover = -1;
node[1].ma = n;
while(m--)
{
int op, a, b;
scanf("%d", &op);
if(op == 1)
{
scanf("%d%d", &a, &b);
updata(a, a+b-1, 1, 1); // 为a+b-1,不能算成a+b。
}
else if(op == 2)
{
scanf("%d%d", &a, &b);
updata(a, a+b-1, -1, 1);
}
else
printf("%d\n", node[1].ma);
}
return 0;
}
分享到:
相关推荐
在本篇博文中,我们将深入探讨线段树的概念,以及如何实现懒惰更新(Lazy Propagation)策略,同时结合POJ1823问题进行实战应用。懒惰更新是优化线段树性能的关键技巧,它避免了频繁地对每个节点进行更新,从而减少...
注意:用JAVA解题一般用Scanner类来进行输入,但对时间要求严格的题,用它可能会超时,我、解POJ1823的时候遇到这样的问题,后改用StreamTokenizer类进行输入,过了。看来后者处理输入的效率要高点。 现小结如下...
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
这是清华大学博士后团队出品的最新版DeepSeek AI教程,帮助普通人15天从入门到精通,熟练掌握DeepSeek的高阶教程,104页完整版,限时免费分享。 资料链接: https://pan.quark.cn/s/c589f1a1982b
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
科研人员
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
基于三菱FX PLC的组态王五层电梯控制系统设计与实现,基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,关键词:三菱FX PLC;组态王五层电梯控制系统;控制系统,三菱FX PLC五层电梯控制系统
邀约圈商业模式.pptx
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈! 1、 java常见2024年最新面试题附答案解析 2、 java常见面试题及答案汇总2024年最新版 3、 java常见面试题2024年及答案汇总 4、 java最新2024年面试题及答案汇总版 5、 java最新2024年面试题大汇总附答案 6、 java最新2024年面试题附答案解析大汇总 7、 java最新2024年面试题高级面试题及附答案解析 8、 java最新基础面试题及答案整理 9、 java最新面试题2024年常见面试题及答案汇总 10、 java最新面试题及答案整理汇总版 11、 java最新面试题及答案附答案汇总 12、
复件 修缮修理合同[示范文本].doc
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
利用MacBERT预训练模型对新闻标题文本数据进行分类项目源代码,分类类型包含楼市类、股市类、教育类,并根据新的新闻标题预测其所属分类 本目录包含MacBERT预训练模型,该模型引入了一种纠错型掩码语言模型(Mac)预训练任务,缓解了“预训练-下游任务”不一致的问题。MacBERT在多种NLP任务上取得了显著性能提升。