【SOJ1136】【cogs775】山海经

这篇博客介绍了如何利用线段树解决《山海经》中寻找最满意路线的问题。海东老师希望找到从第a座山到第b座山中间某段路的最大喜恶度之和,博客详细解析了利用线段树进行求解的思路,包括线段树的构建、更新和查询操作,并提供了样例输入和输出。
摘要由CSDN通过智能技术生成

Description

“南山之首日鹊山。其首日招摇之山,临于西海之上,多桂,多金玉。有草焉,其状如韭而青华,其名日祝余,食之不饥……又东三百里,日堂庭之山,多棪木,多白猿,多水玉,多黄金。
又东三百八十里,日猨翼之山,其中多怪兽,水多怪鱼,多白玉,多蝮虫,多怪蛇,名怪木,不可以上。……”
《山海经》是以山为纲,以海为线记载古代的河流、植物、动物及矿产等情况,而且每一条记录路线都不会有重复的山出现。某天,你的地理老师海东想重游《山海经》中的路线,为了简化问题,海东老师已经把每座山用一个整数表示他对该山的喜恶程度,他想知道第a座山到第b座山的中间某段路(i,j)。能使他感到最满意,即(i,j)这条路上所有山的喜恶度之和是(c,d)(a≤c≤d≤b)最大值。于是老师便向你请教,你能帮助他吗?值得注意的是,在《山海经》中,第i座山只能到达第i+1座山。

Input

输入文件名为(hill.in)。
输入第1行是两个数,n,m,2≤n≤100000,1≤m≤l00000,n表示一共有n座山,m表示老师想查询的数目。
第2行是n个整数,代表n座山的喜恶度,绝对值均小于10000。
以下m行每行有a,b两个数,1≤a≤j≤b≤m,表示第a座山到第b座山。

Output

输出文件名为(hill.out)。
一共有m行,每行有3个数i,j,s,表示从第i座山到第j座山总的喜恶度为s。显然,对于每个查询,有a≤i≤j≤b,如果有多组解,则输出i最小的,如果i也相等,则输出j最小的解。

Sample Input

5 3
5 -6 3 -1 4
1 3
1 5
5 5

Sample Output

1 1 5
3 5 6
5 5 4

Hint

对于 30% 的数据,满足1<=n ,m<=500。
对于 60% 的数据,满足1<=n ,m<=2000。
对于 100% 的数据,满足1<=n ,m<=100000。

Key To Problem

60% 的数据,利用dp思想,对于每次询问查询一次区间最大连续子段和,时间复杂度为O(n*m);
100% 的数据,可以用线段树来求。
建线段树时,需要考虑两个问题,线段树中储存的内容和如何利用子节点的信息来更新父节点的信息。
线段树中的内容不难想到需要利用三个值来求解。
一开始我想的是cnt表示一个节点最大值区间,lcnt表示节点中最大区间左边所有值的和,rcnt表示节点中最大区间右边所有值的和。好不容易写出来了,之后我就傻逼了,这个奇怪的东西连样例都过不了。 <

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值