`

poj 1823

 
阅读更多

题意:一个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;
}

 

 

 

 

分享到:
评论

相关推荐

    线段树入门学习(三)懒操作(兼解POJ1823) JAVA

    在本篇博文中,我们将深入探讨线段树的概念,以及如何实现懒惰更新(Lazy Propagation)策略,同时结合POJ1823问题进行实战应用。懒惰更新是优化线段树性能的关键技巧,它避免了频繁地对每个节点进行更新,从而减少...

    Java StreamTokenizer使用

    注意:用JAVA解题一般用Scanner类来进行输入,但对时间要求严格的题,用它可能会超时,我、解POJ1823的时候遇到这样的问题,后改用StreamTokenizer类进行输入,过了。看来后者处理输入的效率要高点。  现小结如下...

    高并发场景解决方案:DeepSeekAPI动态限流与队列管理机制.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    模型微调全流程:基于DeepSeekAPI的领域自适应训练方案.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    清华大学最新DeepSeek AI教程(教你15天掌握DeepSeek)附资源

    这是清华大学博士后团队出品的最新版DeepSeek AI教程,帮助普通人15天从入门到精通,熟练掌握DeepSeek的高阶教程,104页完整版,限时免费分享。 资料链接: https://pan.quark.cn/s/c589f1a1982b

    动态内存分配实战:malloc、free的10个黄金使用法则.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    建设城市森林增强城市碳汇能力.pdf

    科研人员

    金融领域实战:用DeepSeek构建智能投研系统的API架构设计.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    结构化输出进阶指南:深度解析DeepSeekAPI响应数据处理技巧.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    性能对决:DeepSeek-V3与ChatGPTAPI在数学推理场景的基准测试.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    基于三菱FX PLC的组态王五层电梯控制系统设计与实现,基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,关键词:三菱FX PLC

    基于三菱FX PLC的组态王五层电梯控制系统设计与实现,基于三菱FX PLC的组态王五层电梯控制系统设计与实现,No.1294 三菱FX PLC基于组态王五层电梯控制系统 ,关键词:三菱FX PLC;组态王五层电梯控制系统;控制系统,三菱FX PLC五层电梯控制系统

    邀约圈商业模式.pptx

    邀约圈商业模式.pptx

    金融领域实战:基于DeepSeek的风控模型构建指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    多级指针的降维打击:图解指针的指针应用场景.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    成本优化指南:通过Token计算模型将API费用降低57%的秘诀.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题

    包括 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

    复件 修缮修理合同[示范文本].doc

    新工科C语言教学改革:沉浸式项目实战+考核秘籍.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    未来已来:DeepSeekV3与R1模型API的特性对比与迁移指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    利用MacBERT预训练模型对新闻标题文本数据进行分类项目源代码,分类类型包含楼市类、股市类、教育类,并根据新的新闻标题预测其所属分类

    利用MacBERT预训练模型对新闻标题文本数据进行分类项目源代码,分类类型包含楼市类、股市类、教育类,并根据新的新闻标题预测其所属分类 本目录包含MacBERT预训练模型,该模型引入了一种纠错型掩码语言模型(Mac)预训练任务,缓解了“预训练-下游任务”不一致的问题。MacBERT在多种NLP任务上取得了显著性能提升。

Global site tag (gtag.js) - Google Analytics