UVALive - 3938:"Ray, Pass me the dishes!"
优美的线段树
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 500000+10
#define ll long long
#define pii pair<int,int>
#define mp make_pair
using namespace std;
int a[MAXN];
int n,m;
struct Node{
int pre_dat;
ll pre_sum;
int suf_dat;
ll suf_sum;
pii dat;
ll sum;
ll d;
Node(int p1=,ll p2=,int p3=,ll p4=,pii p5=mp(,),ll p6=,ll p7=){
pre_dat=p1,pre_sum=p2,suf_dat=p3,suf_sum=p4,dat=p5,sum=p6,d=p7;
}
}data[MAXN<<];
Node Merge(Node t1,Node t2){
if(t1.dat==mp(,))return t2;
if(t2.dat==mp(,))return t1;
Node ret;
ret.d=t1.d+t2.d;
ret.pre_dat=t1.pre_dat,ret.pre_sum=t1.pre_sum;
if(ret.pre_sum<t1.d+t2.pre_sum){
ret.pre_dat=t2.pre_dat,ret.pre_sum=t1.d+t2.pre_sum;
}
ret.suf_dat=t2.suf_dat,ret.suf_sum=t2.suf_sum;
if(ret.suf_sum<=t2.d+t1.suf_sum){
ret.suf_dat=t1.suf_dat,ret.suf_sum=t2.d+t1.suf_sum;
}
ret.dat=t1.dat,ret.sum=t1.sum;
if(ret.sum<t2.sum){
ret.dat=t2.dat,ret.sum=t2.sum;
}
if(ret.sum<(t1.suf_sum+t2.pre_sum)||ret.sum==(t1.suf_sum+t2.pre_sum)&&ret.dat>mp(t1.suf_dat,t2.pre_dat)){
ret.dat=mp(t1.suf_dat,t2.pre_dat),
ret.sum=(t1.suf_sum+t2.pre_sum);
}
return ret;
}
void build(int k,int L,int R){
if(L+==R){
data[k].pre_dat=data[k].suf_dat=L;
data[k].dat=mp(L,L);
data[k].d=data[k].pre_sum=data[k].suf_sum=data[k].sum=a[L];
return;
}
build(k<<,L,(L+R)>>);
build(k<<|,(L+R)>>,R);
data[k]=Merge(data[k<<],data[k<<|]);
}
Node query(int a,int b,int k,int L,int R){
if(b<=L||R<=a){
return Node(,,,,mp(,),,);
}
else if(a<=L&&R<=b){
return data[k];
}
else{
int mid=((L+R)>>);
Node lc=query(a,b,k<<,L,mid);
Node rc=query(a,b,k<<|,mid,R);
return Merge(lc,rc);
}
}
void solve(){
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
build(,,n+);
while(m--){
int x,y;
scanf("%d%d",&x,&y);
Node ans=query(x,y+,,,n+);
printf("%d %d\n",ans.dat.first,ans.dat.second);
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
int T=;
while(~scanf("%d%d",&n,&m)){
printf("Case %d:\n",++T);
solve();
}
return ;
}
UVALive - 3938:"Ray, Pass me the dishes!"的更多相关文章
- UvaLA 3938 "Ray, Pass me the dishes!"
"Ray, Pass me the dishes!" Time Limit: 3000MS Memory Limit: Unkn ...
- UVA 1400."Ray, Pass me the dishes!" -分治+线段树区间合并(常规操作+维护端点)并输出最优的区间的左右端点-(洛谷 小白逛公园 升级版)
"Ray, Pass me the dishes!" UVA - 1400 题意就是线段树区间子段最大和,线段树区间合并,但是这道题还要求输出最大和的子段的左右端点.要求字典序最小 ...
- UVA 1400 1400 - "Ray, Pass me the dishes!"(线段树)
UVA 1400 - "Ray, Pass me the dishes!" option=com_onlinejudge&Itemid=8&page=show_pr ...
- 【LA3938】"Ray, Pass me the dishes!"
原题链接 Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hun ...
- uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
题意:求q次询问的静态区间连续最大和起始位置和终止位置 输出字典序最小的解. 思路:刘汝佳白书 每个节点维护三个值 pre, sub, suf 最大的前缀和, 连续和, 后缀和 然后这个题还要记录解的 ...
- UVALive 3938 - "Ray, Pass me the dishes!" - [最大连续子列和+线段树]
题目链接:https://cn.vjudge.net/problem/UVALive-3938 参考刘汝佳书上说的: 题意: 给出一个长度为n的序列, 再给出m个询问, 每个询问是在序列 $[a,b] ...
- UVALive 3938 Ray, Pass me the dishes! (动态最大连续和)
题意:求一个动态区间的最大连续和. 静态版本的O(n)算法显示不适用了,但是可以用线段树分治,因为一个连续和要在两边的区间,要么跨越两边,对于一个结点维护最大前缀和,后缀和,子区间连续和. 题目要求输 ...
- 线段树(区间合并) LA 3989 "Ray, Pass me the dishes!"
题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair ...
- UVa 1400 (线段树) "Ray, Pass me the dishes!"
求一个区间的最大连续子序列,基本想法就是分治,这段子序列可能在区间的左半边,也可能在区间的右半边,也有可能是横跨区间中点,这样就是左子区间的最大后缀加上右子区间的最大前缀之和. 线段树维护三个信息:区 ...
随机推荐
- 高级软件工程第四次作业(C++)
1 团队组成和选题情况说明 1.1 Git链接:https://github.com/WHUSE2017/C-team 1.2 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(26 ...
- 201621123040《Java程序设计》第十一周学习总结
1.本周学习总结 1.1以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2.书面作业 2.1源代码阅读:多线程程序BounceThread 2.1.1BallRunnable类有什么用?为什 ...
- Beta敏捷冲刺每日报告——Day2
1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.2 00:00 -- 2017.11.3 00:00 讨论时间地点 2017.11.2 晚9:30,电话会议会议 ...
- 20162323周楠《Java程序设计与数据结构》第八周总结
20162323周楠 2016-2017-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 一个异常是一个对象,它定义了并不轻易出现的或是错误的情形 异常由程序或运行时环境抛出, ...
- 结对编程作业——四则运算GUI程序
毛忠庆 201421122088 赵嘉楠 201421122065 源代码存放位置:https://gitee.com/ouwen0819/SiZeYunSuan.git 题目描述 使用 -n 参数控 ...
- 学号:201621123032 《Java程序设计》第11周学习总结
1:本周学习总结 1.1.:以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2:书面作业 2.1.: 源代码阅读:多线程程序BounceThread 1.1: BallRunnable类有什 ...
- 使用PostMan进行API自动化测试
最近在进行一个老项目的升级,第一步是先将node版本从4.x升级到8.x,担心升级会出现问题,所以需要将服务的接口进行验证:如果手动输入各种URL,人肉check,一个两个还行,整个服务..大几十个接 ...
- 数据恢复培训资料:BMP文件详解
BMP是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8 ...
- BizTalk 2016 配置 RosettaNet遇到的坑
本文只针对已经安装好BizTalk 2016 需要在安装RosettaNet加速器的伙伴. IIS配置 权限问题 错误信息 Failed to get IIS metabase property. E ...
- tomcat 修改默认字符集
找到connector节点,插入 disableUploadTimeout="true" useBodyEncodingForURI="true" URIEnc ...