http://poj.org/problem?id=2750

题意:在一个圈中取若干个相邻的数,求他们的最大序列和。不能够同时取所有的数。

看了一篇解题报告写的很详细。。http://blog.csdn.net/non_cease/article/details/7437690

 #include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
const int N=;
using namespace std;
struct node
{
int l,r,sum,minsum,maxsum;
int lmax,rmax,lmin,rmin;
} Tree[*N];
int a[N];
void pushup(int rt)
{
int l = *rt;
int r = *rt+;
Tree[rt].sum=Tree[l].sum+Tree[r].sum;
Tree[rt].minsum=min(min(Tree[l].minsum,Tree[r].minsum),Tree[l].rmin+Tree[r].lmin);
Tree[rt].maxsum=max(max(Tree[l].maxsum,Tree[r].maxsum),Tree[l].rmax+Tree[r].lmax);
Tree[rt].lmax=max(Tree[l].lmax,Tree[l].sum+Tree[r].lmax);
Tree[rt].rmax=max(Tree[r].rmax,Tree[r].sum+Tree[l].rmax);
Tree[rt].lmin=min(Tree[l].lmin,Tree[l].sum+Tree[r].lmin);
Tree[rt].rmin=min(Tree[r].rmin,Tree[r].sum+Tree[l].rmin);
}
void build(int l,int r,int rt)
{
Tree[rt].l = l;
Tree[rt].r = r;
if (l==r)
{
Tree[rt].sum=Tree[rt].minsum=Tree[rt].maxsum=a[r];
Tree[rt].lmax=Tree[rt].rmax=Tree[rt].lmin=Tree[rt].rmin=a[r];
return ;
}
int mid = (l+r)>>;
build(l,mid,*rt);
build(mid+,r,*rt+);
pushup(rt);
}
void update(int pos,int val,int rt)
{
if (Tree[rt].l==Tree[rt].r)
{
Tree[rt].sum=Tree[rt].minsum=Tree[rt].maxsum=val;
Tree[rt].lmax=Tree[rt].rmax=Tree[rt].lmin=Tree[rt].rmin=val;
return ;
}
int mid=(Tree[rt].l+Tree[rt].r)>>;
if (pos<=mid)
update(pos,val,*rt);
else
update(pos,val,*rt+);
pushup(rt);
}
int main()
{
int n,m,pos,val;
scanf("%d",&n);
for (int i = ; i <=n; i++)
{
scanf("%d",&a[i]);
}
build(,n,);
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&pos,&val);
update(pos,val,);
if(Tree[].sum==Tree[].maxsum)
{
printf("%d\n",Tree[].sum-Tree[].minsum);
}
else
{
printf("%d\n",max(Tree[].maxsum,Tree[].sum-Tree[].minsum));
}
}
return ;
}

Potted Flower(线段树+dp)的更多相关文章

  1. POJ 2750 Potted Flower(线段树+dp)

    题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的. 首先求环上最大字段和,而且不能是含有全部元素.本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄.实际可以求出最小值,总和-最小,就 ...

  2. POJ 2750 Potted Flower (线段树区间合并)

    开始懵逼找不到解法,看了网上大牛们的题解才发现是区间合并...  给你n个数形成一个数列环,然后每次进行一个点的修改,并输出这个数列的最大区间和(注意是环,并且区间最大只有n-1个数) 其实只需要维护 ...

  3. POJ.2750.Potted Flower(线段树 最大环状子段和)

    题目链接 /* 13904K 532ms 最大 环状 子段和有两种情况,比如对于a1,a2,a3,a4,a5 一是两个端点都取,如a4,a5,a1,a2,那就是所有数的和减去不选的,即可以计算总和减最 ...

  4. Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)

    [题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...

  5. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. poj2750 线段树 +DP Potted Flower

    问题描述:给定一个环形序列,进行在线操作,每次修改一个元素,输出环上的最大连续子列的和,但不能是完全序列. 算法:把环从一个地方,切断拉成一条直线,用线段树记录当前区间的非空最大子列和当前区间的非空最 ...

  7. lightoj1085 线段树+dp

    //Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...

  8. [CF 474E] Pillars (线段树+dp)

    题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...

  9. HDU-3872 Dragon Ball 线段树+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段, ...

随机推荐

  1. java面试题链接

    http://blog.csdn.net/jackfrued/article/details/17339393

  2. Python&机器学习总结(一)

    ① numpy中np.c_和np.r_ np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_是按行连接两个矩阵,就是把两矩阵左右相加, ...

  3. Idea+maven+testng+reportng生成测试报告

    TestNG自带的测试报告不是很好用,所以一般结合reportng生成美观的测试报告. 首先,在pom.xml中添加testng和reportng相关依赖 <dependencies> & ...

  4. Python爬虫常用库安装

    建议更换pip源到国内镜像,下载会快很多:https://www.cnblogs.com/believepd/p/10499844.html requests pip3 install request ...

  5. LINUX驱动、系统底层

    就业模拟测试题-LINUX驱动.系统底层工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143921试卷录 ...

  6. [luoguP1130] 红牌(DP)

    传送门 幼儿园DP. ——代码 #include <cstdio> #include <iostream> ; << ); int a[MAXN][MAXN], f ...

  7. [luoguP2280] [HNOI2003]激光炸弹(DP)

    传送门 二位前缀和DP大水题 ——代码 #include <cstdio> #include <iostream> ; int n, r, ans; int sum[MAXN] ...

  8. 1827 tarjan+缩点

    #include<stdio.h> #include<stack> #include<iostream> #include<string.h> #inc ...

  9. [ZJOI2009]硬币游戏

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 920  Solved: 406[Submit][Status][Discuss] Descriptio ...

  10. oracle中的类似BIN$MrkCYT9eTTK+0sStMwn7+Q==$0的表的作用

    https://www.2cto.com/database/201211/166482.html https://docs.oracle.com/cd/E11882_01/server.112/e40 ...