POJ 2750 Potted Flower(线段树的区间合并)
题意 : 很多花盆组成的圆圈,每个花盆都有一个值,给你两个数a,b代表a位置原来的数换成b,然后让你从圈里找出连续的各花盆之和,要求最大的。
思路 :这个题比较那啥,差不多可以用DP的思想来解决这个问题,你在某个地方将这个环断开,因为线段树无法建成环形的。然后再去找那个最大值。将这个序列分成两部分,先求左边的最大连续和a,再求右边连续和b,但是由于他们中间相连的那部分,就是左部分的最右边的连续最大和x加上右部分的最左边的连续最大和y加起来可能比ab都大,但分开的话可能并没有a或b大。所以要进行区间合并,将y并到左边去,或者将x并到右边去,但本身那个边界不变
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- const int maxn = ;
- int maxx[maxn << ],minn[maxn << ] ;
- int lmax[maxn << ],rmax[maxn << ] ;
- int lmin[maxn << ],rmin[maxn << ] ;
- int sum[maxn << ] ;
- void dp(int v)
- {
- int l = v << ,r = l+;
- sum[v] = sum[l]+sum[r] ;
- maxx[v] = max(max(maxx[l],maxx[r]),lmax[r] + rmax[l]) ;
- minn[v] = min(min(minn[l],minn[r]),lmin[r] + rmin[l]) ;
- lmax[v] = max(lmax[l],sum[l]+lmax[r]) ;
- rmax[v] = max(rmax[r],sum[r]+rmax[l]) ;
- lmin[v] = min(lmin[l],sum[l]+lmin[r]) ;
- rmin[v] = min(rmin[r],sum[r]+rmin[l]) ;
- }
- void build(int v,int l,int r)
- {
- if(l == r)
- {
- scanf("%d",&sum[v]) ;
- maxx[v] = minn[v] = lmax[v] = rmax[v] = lmin[v] = rmin[v] = sum[v] ;
- return ;
- }
- int mid = (l+r) >> ;
- build(v*,l,mid) ;
- build(v*+,mid+,r) ;
- dp(v) ;
- }
- void update(int v,int l,int r,int num,int value)
- {
- if(l == r)
- {
- sum[v] = maxx[v] = minn[v] = value ;
- lmax[v] = rmax[v] = lmin[v] = rmin[v] = value ;
- return ;
- }
- int mid = (l+r) >> ;
- if(mid >= num) update(v*,l,mid,num,value) ;
- else update(v*+,mid+,r,num,value) ;
- dp(v) ;
- }
- int main()
- {
- int n ;
- while(~scanf("%d",&n))
- {
- build(,,n) ;
- int m ;
- scanf("%d",&m) ;
- while(m--)
- {
- int x,y ;
- int ans ;
- scanf("%d %d",&x,&y) ;
- update(,,n,x,y) ;
- if(sum[] == maxx[])
- ans = sum[]-minn[] ;
- else
- ans = max(maxx[], sum[]-minn[]) ;
- printf("%d\n",ans) ;
- }
- }
- return ;
- }
POJ 2750 Potted Flower(线段树的区间合并)的更多相关文章
- POJ 2750 Potted Flower (线段树区间合并)
开始懵逼找不到解法,看了网上大牛们的题解才发现是区间合并... 给你n个数形成一个数列环,然后每次进行一个点的修改,并输出这个数列的最大区间和(注意是环,并且区间最大只有n-1个数) 其实只需要维护 ...
- POJ.2750.Potted Flower(线段树 最大环状子段和)
题目链接 /* 13904K 532ms 最大 环状 子段和有两种情况,比如对于a1,a2,a3,a4,a5 一是两个端点都取,如a4,a5,a1,a2,那就是所有数的和减去不选的,即可以计算总和减最 ...
- POJ 2750 Potted Flower(线段树+dp)
题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的. 首先求环上最大字段和,而且不能是含有全部元素.本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄.实际可以求出最小值,总和-最小,就 ...
- 线段树:CDOJ1592-An easy problem B (线段树的区间合并)
An easy problem B Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- 线段树的区间合并 B - LCIS
B - LCIS HDU - 3308 这个是一个很简单很明显的线段树的区间合并,不过区间合并的题目都还是有点难写,建议存个板子. #include <cstdio> #include & ...
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
D. Developing Game Pavel is going to make a game of his dream. However, he knows that he can't mak ...
- CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...
- (简单) 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
Potted Flower Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3872 Accepted: 1446 Des ...
随机推荐
- mysql2csv 和 csv2mysql 工具
mysql2csv 和 csv2mysql 工具 在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具.csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 ...
- PHP + ajax 实现异步登录验证
login.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- RazorEngine在非MVC下的使用,以及使用自定义模板
---恢复内容开始--- RazorEngine模板引擎大大的帮助了我们简化字符串的拼接与方法的调用,开源之后,现在在简单的web程序,winform程序,甚至控制台程序都可以利用它来完成. 但如何在 ...
- Kettle中通过触发器方式实现数据 增量更新
在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...
- Cookie / Session / URL重写
Cookie //创建一个Cookie对象 Cookie cookie = new Cookie("username","JACK"); //在客户端存储的时间 ...
- (hdu)1022 Train Problem I 火车进站问题
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 Problem Description As the new term comes, ...
- ZeroMemory和memset的区别
摘自百度百科,保存为学习使用 ZeroMemory,是美国微软公司的软件开发包SDK中的一个宏. 其作用是用0来填充一块内存区域. 声明 void ZeroMemory( PVOID Destinat ...
- web api 跨域请求,ajax跨域调用webapi
1.跨域问题仅仅发生在Javascript发起AJAX调用,或者Silverlight发起服务调用时,其根本原因是因为浏览器对于这两种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服 ...
- xp 下卸载 硬盘安装的 ubuntu (本人的悲伤史)
正常启动XP系统,到http://www.sysint.no 下载 MBRFIX.zip,解压,把文件放在C盘, 点击“开始”==“运行”==“cmd”,出现下面图 输入cd\,如下图, 再按回车键, ...
- js stringObject的indexOf方法
我所写的这个是基本知识的基本知识,为什么我还是要写呢,所谓说好记性不如烂比头,作为一名前端开发人员,太多相似的代码见的又太多,但是又不常见,所以很容易忘记,那我把indexOf原理讲清楚 indexO ...