热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU1698(线段树+延迟标记)

一看便知道用线段树,题目比较水,一般简单的线段树就是两招离散化和延迟标记这道题目明显是用延迟标记,不要用链式树,用树状数组,否则会超空间。#include<iostream>

一看便知道用线段树,题目比较水,一般简单的线段树就是两招 离散化和延迟标记

这道题目明显是用延迟标记,不要用链式树,用树状数组,否则会超空间。

#include
#include
#include
using namespace std;

int N,Q;

typedef struct node
{
int l,r;
int left_value,right_value;
int delay;
}node;
node tree[100000*4+10];

int build(int p,int x,int y)
{
tree[p].delay=0;
tree[p].l=x;
tree[p].r=y;
if(x==y)
{
tree[p].left_value=1;
tree[p].right_value=0;
}
else
{
tree[p].left_value=build(p*2,x,(x+y)/2);
tree[p].right_value=build(p*2+1,(x+y)/2+1,y);
}
return tree[p].left_value+tree[p].right_value;
}

int updates(int p,int x,int y,int v)
{
if(tree[p].delay!=0)
{
tree[p].left_value=((tree[p].l+tree[p].r)/2-tree[p].l+1)*tree[p].delay;
tree[p].right_value=(tree[p].r-(tree[p].l+tree[p].r)/2)*tree[p].delay;
if(tree[p].l!=tree[p].r) tree[p*2].delay=tree[p].delay;
if(tree[p].l!=tree[p].r) tree[p*2+1].delay=tree[p].delay;
tree[p].delay=0;
}

if(!(x<=tree[p].r&&y>=tree[p].l))
return tree[p].left_value+tree[p].right_value;


if(x<=tree[p].l&&y>=tree[p].r)
{
tree[p].left_value=((tree[p].l+tree[p].r)/2-tree[p].l+1)*v;
tree[p].right_value=(tree[p].r-(tree[p].l+tree[p].r)/2)*v;
if(tree[p].l!=tree[p].r) tree[p*2].delay=v;
if(tree[p].l!=tree[p].r) tree[p*2+1].delay=v;
}
else
{
tree[p].left_value=updates(p*2,x,y,v);
tree[p].right_value=updates(p*2+1,x,y,v);
}
return tree[p].left_value+tree[p].right_value;
}

int main()
{
int T;
scanf("%d",&T);
for(int Case=1;Case<=T;Case++)
{
scanf("%d%d",&N,&Q);
build(1,1,N);
for(int i=1;i<=Q;i++)
{
int a,b,v;
scanf("%d%d%d",&a,&b,&v);
updates(1,a,b,v);
}
printf("Case %d: The total value of the hook is %d.\n",
Case,tree[1].left_value+tree[1].right_value);
}
}



推荐阅读
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
author-avatar
大额资金一号
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有