Snowy Smile "题目传送门" 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界。按照这种顺序插入点,这是一个压维的操作,即在线段树中的y位置加上其w,并利用线段树来更新动态的最大子段和。 代码如下 cpp include de ...
分类:
其他好文 时间:
2019-08-07 22:19:12
阅读次数:
190
时间不够了,$T2$没切,好烦,T_T…… "prob1:Reign" 考虑分割为间隔为$k$的两个区间,分别跑最大子段和,然后移动中间的$k$区间,左边加入,右边弹出,$O(n)$得解($md$,最大子段和竟然调了一个多小时,我是要退役了吗): "prob6:Chef and Digit Jump ...
分类:
其他好文 时间:
2019-08-07 09:28:41
阅读次数:
123
题意 序列单点修改,区间询问最大连续子段和。 最大子段和难以更新,不过这里的单点修改降低了难度,不用维护标记了。现在要做的就是通过维护数个数据支持最大子段和的查询。 考虑最大子段和是连续子段,如果在这个子段中砍一刀,它仍然是两段: 而反过来,知道了右子段中紧靠左边的最大子段和,左子段中紧靠右边的最大 ...
分类:
其他好文 时间:
2019-08-04 01:41:47
阅读次数:
115
**最大子段和**很简单的一道Dp题,用$dp[i]$表示$1-i$中的最大子段和能够得出状态转移方程:$dp[i] = max(dp[i], dp[i]+dp[i-1])$初始化$dp[i]=num[i]$代码 1 #include <bits/stdc++.h> 2 using namespac ...
分类:
其他好文 时间:
2019-07-27 21:02:50
阅读次数:
118
"Can you answer these queries III" 考虑子段和的三种组成方式: 全在左儿子里 全在右儿子里 两边都有 可以想到维护一棵线段树,每个节点有四个值$sum,lmax,rmax,dmax$。 sum为区间和,lmax为从区间左端点开始的最大子段和,rmax表示在区间右端点 ...
分类:
其他好文 时间:
2019-07-13 17:20:38
阅读次数:
125
纯数据结构题,没有思维难度。直接用线段树求最大子段和的方法完成树上路径的合并。注意链上合并顺序要符合序列的前后顺序。 cpp include include define cd wb?a:b;} inline int mi(int a,int b){return a b?b:a;} inline v ...
分类:
其他好文 时间:
2019-07-07 12:35:02
阅读次数:
70
题意:1.求一个最靠左的长x的区间全部为0,并修改为1,输出这个区间的左端点 2.修改一个区间为0 实际上是维护最大连续子段和,原来也写过 大概需要维护一个左/右最大子段和,当前这段最大子段长,再维护一个lazytag ...
分类:
其他好文 时间:
2019-06-14 21:43:21
阅读次数:
119
N个整数组成的序列a[1],a[2],a[3],…,a[n],你可以对数组中的一对元素进行交换,并且交换后求a[1]至a[n]的最大子段和,所能得到的结果是所有交换中最大的。当所给的整数均为负数时和为0。 例如:{-2,11,-4,13,-5,-2, 4}将 -4 和 4 交换,{-2,11,4,1 ...
分类:
其他好文 时间:
2019-05-23 21:06:11
阅读次数:
151
N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。 例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。 收起 N个整数组成 ...
分类:
其他好文 时间:
2019-05-23 15:40:31
阅读次数:
84