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

hdu1823LuckandLove(线段树)

版权声明:本文为博主原创文章。未经博主同意不得转载。https:blog.csdn.netSCNU_Jiechaoarticledetails24406391题意&#
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/SCNU_Jiechao/article/details/24406391

题意:Wiskey招女友,每一个女生看其身高、活泼度和缘分值。如今运行两种操作,1、I。增加一位女生的身高。活泼度和缘分值;2、Q,查询身高在H1, H2之间,活泼度在A1, A2之间的女生的最高缘分值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1823

——>>查询某个区间的最值,若是一维,可用RMQ解法。。也可用线段树解法。。

如今要查身高限一个区间。活泼度限一个区间,是一个二维的情景。

。将线段树扩至二维。。时间复杂度:O(N+M*log(N)^2)。。

——>>坑1:G++的BUG。。大哭

。以G++提交数次皆WA。

改交C++即过。。有朋友指出是代码触发了没有定义行为,也有朋友说是由于G++的O2 BUG。

——>>坑2:题目中说是1位小数。那么。处理方法用scanf("%d.%d", &A1, &A2)。再进行A1 * 10 + A2,会比用scanf("%lf", &A),再进行(int)(A * 10)更精确(自己測下0.0到0.9就能够发现)。。但是,用第一种处理方式却会WA,偏偏要用另外一种不那么精确的处理方式才会AC。。大哭

第一道二维线段树题目,做到想哭了。

#include
#include using namespace std;#define lc (o<<1)
#define rc ((o<<1)|1)const int maxh &#61; 100 &#43; 10;
const int maxa &#61; 1000 &#43; 10;
int mmax[maxh<<2][maxa<<2];void build_A(int O, int o, int L, int R) { //活泼度建树mmax[O][o] &#61; -1;if(L &#61;&#61; R) return;int M &#61; (L &#43; R) >> 1;build_A(O, lc, L, M);build_A(O, rc, M&#43;1, R);
}void build_H(int o, int L, int R) { //身高建树build_A(o, 1, 0, 1000);if(L &#61;&#61; R) return;int M &#61; (L &#43; R) >> 1;build_H(lc, L, M);build_H(rc, M&#43;1, R);
}void Insert_A(int O, int o, int L, int R, int A, int D) { //依据活泼度建树if(L &#61;&#61; R) {mmax[O][o] &#61; max(mmax[O][o], D);return;}int M &#61; (L &#43; R) >> 1;if(A <&#61; M) Insert_A(O, lc, L, M, A, D);else Insert_A(O, rc, M&#43;1, R, A, D);mmax[O][o] &#61; max(mmax[O][lc], mmax[O][rc]);
}void Insert(int o, int L, int R, int H, int A, int D) {Insert_A(o, 1, 0, 1000, A, D);if(L &#61;&#61; R) return;int M &#61; (L &#43; R) >> 1;if(H <&#61; M) Insert(lc, L, M, H, A, D);else Insert(rc, M&#43;1, R, H, A, D);
}int query_A(int O, int o, int L, int R, int A1, int A2) { //依据活泼度查询if(A1 <&#61; L && R <&#61; A2) return mmax[O][o];int M &#61; (L &#43; R) >> 1;int Max1 &#61; -1, Max2 &#61; -1;if(A1 <&#61; M) Max1 &#61; query_A(O, lc, L, M, A1, A2);if(A2 > M) Max2 &#61; query_A(O, rc, M&#43;1, R, A1, A2);return (Max1 > Max2) ? Max1 : Max2;
}int query(int o, int L, int R, int H1, int H2, int A1, int A2) {if(H1 <&#61; L && R <&#61; H2) return query_A(o, 1, 0, 1000, A1, A2);int M &#61; (L &#43; R) >> 1;int Max1 &#61; -1, Max2 &#61; -1;if(H1 <&#61; M) Max1 &#61; query(lc, L, M, H1, H2, A1, A2);if(H2 > M) Max2 &#61; query(rc, M&#43;1, R, H1, H2, A1, A2);return (Max1 > Max2) ?

Max1 : Max2; } int main() { int M; char op; while(scanf("%d", &M) &#61;&#61; 1 && M) { build_H(1, 100, 200); for(int i &#61; 0; i A2) swap(A1, A2); if(H1 > H2) swap(H1, H2); // if(A[0] > A[1]) swap(A[0], A[1]); // int ret &#61; query(1, 100, 200, H1, H2, A[0], A[1]); int ret &#61; query(1, 100, 200, H1, H2, A1, A2); ret !&#61; -1 ?

printf("%.1f\n", ret/10.0) : puts("-1"); } } } return 0; }




转:https://www.cnblogs.com/xfgnongmin/p/10619015.html



推荐阅读
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
author-avatar
ANANREMEMBERO38_810
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有