热门标签 | 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



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
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社区 版权所有