TZOJ 4021 Ugly Problem(线段树区间子段最大)
描述
给定一个序列A[0],A[1],…A[N-1],要求找到p0,p1,p2,p3使得A[p0]+A[p0+1]+…+A[p1] + A[p2]+A[p2+1]+…+A[p3]最大(0<=p0<=p1<p2<=p3<N)。你只需要求出这个最大值就可以。
输入
输入的第一行为一个数N(2<=N<=10000),接下来的一行为N个整数(-100<A[i]<100)。
输出
输出一个整数表示最大值。
样例输入
5
-1 -2 -4 -5 4
样例输出
3
题意
如上。
题解
枚举分割点,求左区间最大子段和和到右区间最大字段和。
区间最大值段和是一个经典题,线段树维护。
代码
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn=;
- struct node{
- int sum,lmax,rmax,lrs;
- }tree[maxn<<];
- void pushup(int x){
- tree[x].sum=tree[x<<].sum+tree[x<<|].sum;
- tree[x].lmax=max(tree[x<<].lmax,tree[x<<|].lmax+tree[x<<].sum);
- tree[x].rmax=max(tree[x<<|].rmax,tree[x<<].rmax+tree[x<<|].sum);
- tree[x].lrs=max(max(tree[x<<].lrs,tree[x<<|].lrs),tree[x<<].rmax+tree[x<<|].lmax);
- }
- void build(int l,int r,int p){
- if(l==r){
- scanf("%d",&tree[p].sum);
- tree[p].lmax=tree[p].lrs=tree[p].rmax=tree[p].sum;
- return;
- }
- int mid=(l+r)>>;
- build(l,mid,p<<);
- build(mid+,r,p<<|);
- pushup(p);
- }
- void update(int k,int v,int l,int r,int p){
- if(l==r){
- tree[p].lmax=tree[p].lrs=tree[p].rmax=tree[p].sum=v;
- return;
- }
- int mid=(l+r)>>;
- if(k<=mid)update(k,v,l,mid,p<<);
- else update(k,v,mid+,r,p<<|);
- pushup(p);
- }
- node quert(int L,int R,int l,int r,int p){
- if(L<=l&&r<=R)return tree[p];
- int mid=(l+r)>>;
- node vis,f1,f2;
- vis.sum=;
- if(L<=mid)vis=f1=quert(L,R,l,mid,p<<);
- if(R>mid)vis=f2=quert(L,R,mid+,r,p<<|);
- if(L<=mid&&R>mid){
- vis.sum=f1.sum+f2.sum;
- vis.lmax=max(f1.lmax,f1.sum+f2.lmax);
- vis.rmax=max(f2.rmax,f2.sum+f1.rmax);
- vis.lrs=max(max(f1.lrs,f2.lrs),f1.rmax+f2.lmax);
- }
- return vis;
- }
- int main(){
- int n,maxx=-1e9;
- scanf("%d",&n);
- build(,n,);
- for(int i=;i<n;i++)
- maxx=max(quert(,i,,n,).lrs+quert(i+,n,,n,).lrs,maxx);
- printf("%d\n",maxx);
- return ;
- }
TZOJ 4021 Ugly Problem(线段树区间子段最大)的更多相关文章
- TZOJ 3315 买火车票(线段树区间最小值)
描述 Byteotian州铁道部决定赶上时代,为此他们引进了城市联网.假设城市联网顺次连接着n 个市从1 到n 编号(起始城市编号为1,终止城市编号为n).每辆火车有m个座位且在任何两个运送更多的乘客 ...
- UVA 1400."Ray, Pass me the dishes!" -分治+线段树区间合并(常规操作+维护端点)并输出最优的区间的左右端点-(洛谷 小白逛公园 升级版)
"Ray, Pass me the dishes!" UVA - 1400 题意就是线段树区间子段最大和,线段树区间合并,但是这道题还要求输出最大和的子段的左右端点.要求字典序最小 ...
- hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...
- poj3468 A Simple Problem with Integers(线段树区间更新)
https://vjudge.net/problem/POJ-3468 线段树区间更新(lazy数组)模板题 #include<iostream> #include<cstdio&g ...
- POJ 3468:A Simple Problem with Integers(线段树区间更新模板)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 141093 ...
- POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询)
POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询) 题意分析 注意一下懒惰标记,数据部分和更新时的数字都要是long long ,别的没什么大 ...
- poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 75541 ...
- (简单) POJ 3468 A Simple Problem with Integers , 线段树+区间更新。
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- POJ 3468 A Simple Problem with Integers(线段树&区间更新)题解
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
随机推荐
- MATLAB 中自定义函数的使用
MATLAB在文件内部(在函数内部)定义函数,但文件名以开头函数来命名,与Java中每个文件只能有一个公开类,但在文件内部还是可以定义其他非公开类一个道理. 无参函数 do.m function do ...
- StringUtils工具
ppublic class StringUtils { private StringUtils() { } /** * 文本左边补零 * * @param maxLength 文本长度 * @para ...
- Easy Excel导出
@GetMapping(value = "/down2") public void down2(HttpServletResponse response) throws Excep ...
- 试做Chrome插件——whatweb的chrome插件(从老博客转)
引子 最近一个月每天早上在学Javascript,刚学完基础语法和一点点jQuery,今天忍不住写个Chrome玩玩看看自己对JavaScript的掌握怎么样了. 目标 考虑了一下,打算做个小东西,但 ...
- Android开发 处理拍照完成后的照片角度
private void initImageAngle(){ Bitmap imageBitmap = BitmapFactory.decodeFile(FilePathSession.getFace ...
- leetcode146周赛-5130-等价多米诺骨牌对的数量
题目描述: 方法一: class Solution(object): def numEquivDominoPairs(self, dominoes): """ :type ...
- leetcode-95-不同的二叉搜索树(卡特兰数)
题目描述: 方法一:动态规划 O(n^2) O(n) class Solution: def numTrees(self, n: int) -> int: dp = [0]*(n+1) dp[0 ...
- order方法属于模型的连贯操作方法之一
order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法如下: $Model->where('status=1')->order('id desc')->limit(5 ...
- CSS自动换行、强制不换行、强制断行、超出显示省略号
转自:https://blog.csdn.net/liuyan19891230/article/details/50969393 P标签是默认是自动换行的,因此设置好宽度之后,能够较好的实现效果,但是 ...
- Maven的作用及简介
Maven的作用及简介 一.maven作用 项目之间都是有依赖的,比如A项目依赖于B项目,B项目依赖与C.D项目,等等.这样的依赖链可能很长. 但是,没有一个项目的jar包我们都要导入进去,我们要做的 ...