[POJ2750]Potted Flower
Description
The little cat takes over the management of a new park. There is a large circular statue in the center of the park, surrounded by N pots of flowers. Each potted flower will be assigned to an integer number (possibly negative) denoting how attractive it is. See the following graph as an example:(Positions of potted flowers are assigned to index numbers in the range of 1 ... N. The i-th pot and the (i + 1)-th pot are consecutive for any given i (1 <= i < N), and 1st pot is next to N-th pot in addition.)
The board chairman informed the little cat to construct "ONE arc-style cane-chair" for tourists having a rest, and the sum of attractive values of the flowers beside the cane-chair should be as largeas possible. You should notice that a cane-chair cannot be a total circle, so the number of flowersbeside the cane-chair may be 1, 2, ..., N - 1, but cannot be N. In the above example, if we construct a cane-chair in the position of that red-dashed-arc, we will have the sum of 3+(-2)+1+2=4, which is the largest among all possible constructions.Unluckily, some booted cats always make trouble for the little cat, by changing some potted flowers to others. The intelligence agency of little cat hascaught up all the M instruments of booted cats' action. Each instrument is in the form of "A B", which means changing the A-th potted flowered with a new one whose attractive value equals to B. You have to report the new "maximal sum" after each instruction.
给定一个环形序列,进行在线操作,每次修改一个元素,输出环上的最大连续子段的和。
Input
There will be a single test data in the input. You are given an integer N (4 <= N <= 100000) in the
first input line.The second line contains N integers, which are the initial attractive value of eachpotted flower. The i-th number is for the potted flower on the i-th position.A single integer M (4
<= M <= 100000) in the third input line, and the following M lines each contains an instruction "A B
" in the form described above.Restriction: All the attractive values are within [-1000, 1000]. We gu
arantee the maximal sum will be always a positive integer.
Output
For each instruction, output a single line with the maximum sum of attractive values for the optimumcane-chair.
Sample Input
5
3 -2 1 2 -5
4
2 -2
5 -5
2 -4
5 -1
Sample Output
4
4
3
5
破环成链,记录子序列最大值和最小值,以及区间和。
当环上所有的数都是正数时,答案为 区间和-子序列最小值
否则,答案为 max{区间和-子序列最小值,区间最大值}
有类似的题目,参考最大连续子数列和
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=1e5;
struct Segment{
#define ls (p<<1)
#define rs (p<<1|1)
struct AC{
int Maxl,Maxr,Max;//Max为子序列最大值,Maxl与Maxr是为了更新Max而产生,分别是从左边开始的序列最大值和从右边开始的序列最大值
int Minl,Minr,Min;//与Max类似
int sum;//区间和
void init(int x){Maxl=Maxr=Max=Minl=Minr=Min=sum=x;}
}tree[N*4+10];
friend AC operator +(const AC &x,const AC &y){//重定义+后的更新
AC z; z.init(0);
z.Max=max(max(x.Max,y.Max),x.Maxr+y.Maxl);
z.Maxl=max(x.Maxl,x.sum+y.Maxl);
z.Maxr=max(y.Maxr,y.sum+x.Maxr);
z.Min=min(min(x.Min,y.Min),x.Minr+y.Minl);
z.Minl=min(x.Minl,x.sum+y.Minl);
z.Minr=min(y.Minr,y.sum+x.Minr);
z.sum=x.sum+y.sum;
return z;
}
void build(int p,int l,int r){
if (l==r){
tree[p].init(read());
return;
}
int mid=(l+r)>>1;
build(ls,l,mid),build(rs,mid+1,r);
tree[p]=tree[ls]+tree[rs];
}
void change(int p,int l,int r,int x,int t){
if (l==r){
tree[p].init(t);
return;
}
int mid=(l+r)>>1;
if (x<=mid) change(ls,l,mid,x,t);
if (x>mid) change(rs,mid+1,r,x,t);
tree[p]=tree[ls]+tree[rs];
}
void write(){
int Ans=tree[1].sum-tree[1].Min;
if (tree[1].sum!=tree[1].Max) Ans=max(Ans,tree[1].Max);
printf("%d\n",Ans);
}
}T;
int main(){
int n=read();
T.build(1,1,n);
int m=read();
for (int i=1;i<=m;i++){
int x=read(),y=read();
T.change(1,1,n,x,y);
T.write();
}
return 0;
}
[POJ2750]Potted Flower的更多相关文章
- POJ 2750 Potted Flower
Potted Flower Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3872 Accepted: 1446 Des ...
- (简单) POJ 2750 Potted Flower,环+线段树。
Description The little cat takes over the management of a new park. There is a large circular statue ...
- 【POJ 2750】 Potted Flower(线段树套dp)
[POJ 2750] Potted Flower(线段树套dp) Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4566 ...
- poj2750 线段树 +DP Potted Flower
问题描述:给定一个环形序列,进行在线操作,每次修改一个元素,输出环上的最大连续子列的和,但不能是完全序列. 算法:把环从一个地方,切断拉成一条直线,用线段树记录当前区间的非空最大子列和当前区间的非空最 ...
- POJ 2750 Potted Flower (线段树区间合并)
开始懵逼找不到解法,看了网上大牛们的题解才发现是区间合并... 给你n个数形成一个数列环,然后每次进行一个点的修改,并输出这个数列的最大区间和(注意是环,并且区间最大只有n-1个数) 其实只需要维护 ...
- POJ 2750 Potted Flower(线段树的区间合并)
点我看题目链接 题意 : 很多花盆组成的圆圈,每个花盆都有一个值,给你两个数a,b代表a位置原来的数换成b,然后让你从圈里找出连续的各花盆之和,要求最大的. 思路 :这个题比较那啥,差不多可以用DP的 ...
- POJ.2750.Potted Flower(线段树 最大环状子段和)
题目链接 /* 13904K 532ms 最大 环状 子段和有两种情况,比如对于a1,a2,a3,a4,a5 一是两个端点都取,如a4,a5,a1,a2,那就是所有数的和减去不选的,即可以计算总和减最 ...
- POJ 2750 Potted Flower (单点改动求线段树上最大子序列和)
题目大意: 在一个序列上每次改动一个值,然后求出它的最大的子序列和. 思路分析: 首先我们不考虑不成环的问题.那就是直接求每一个区间的最大值就好了. 可是此处成环,那么看一下以下例子. 5 1 -2 ...
- POJ 2750 Potted Flower(线段树+dp)
题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的. 首先求环上最大字段和,而且不能是含有全部元素.本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄.实际可以求出最小值,总和-最小,就 ...
随机推荐
- jquery 动态添加,降低input表单的方法
html代码例如以下 <html> <tr><button style="margin-left:10px" class="add_fiel ...
- Mybatis加入Ehcache支持
1.Mybatis默认的缓存配置 MyBatis 包括一个很强大的查询缓存特性,它能够很方便地配置和定制. Mybatis缓存包括全局的缓存和局部的缓存.全局的缓存能够讲主配置文件的setting属性 ...
- Object.getOwnPropertyNames()
1.Object.getOwnPropertyNames(),遍历实例属性(包括不可枚举),返回属性名组成的数组 var arr = ["a", "b", &q ...
- 将Python打印的内容进行高亮的输出
将打印的内容进行高亮的显示 内容: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: "\033[41;36m something he ...
- 朴素的标题:MVC中权限管理实践
基于MVC的web项目最好的权限控制方式我认为是对Action的控制,实现思路记录于此,权限管理分成两个部分授权.认证. 一.授权 1.读取当前项目中的所有需要控制的Action /// <su ...
- MySQL的引入,绿色包下载和应用
一.下载MySQL绿色版 1.下载地址: 以下是MySQL最新绿色版链接(都是来源于oracle官网),点击以下链接直接下载. 1.1.官网链接:https://www.oracle.com/inde ...
- Pthon的定时任务APScheduler的启动与关闭
Pthon的定时任务APScheduler的启动与关闭 安装: sudo pip install apscheduler 使用: 直接运行Python文件即可,如 python XXX.py,XXX. ...
- Receiver type ‘X’ for instance message is a forward declaration
这往往是引用的问题. ARC要求完整的前向引用,也就是说在MRC时代可能仅仅须要在.h中申明@class就能够,可是在ARC中假设调用某个子类中未覆盖的父类中的方法的话.必须对父类.h引用,否则无法编 ...
- 阐述Linux操作系统之rpm五种基本操作
Linux操作系统现在已经成为流行的操作系统,很多的人都开始学习,Linux操作系统包括了很多的专业知识,今天和大家讲讲Linux操作系统中的rpm基本操作.希望你学会本文中提到rpm的五种基本操作知 ...
- SoapUI中Code多行显示设置
你们的SoapUI 有设置下面的选项吗? Before adding your project, we recommend that you enable the following ReadyAPI ...