[冬令营Day1 T2]sequence
|
题目描述 Description
|
||||||||
|
给一个长度为N的序列以及Q的询问,每次两个参数l,r,问你序列[l,r]中的最大连续和
|
||||||||
|
输入描述 Input Description
|
||||||||
|
一行二个正整数N,Q。 |
||||||||
|
输出描述 Output Description
|
||||||||
|
对于每个询问,输出一行一个整数,描述答案。
|
||||||||
|
样例输入 Sample Input
|
||||||||
|
4 3
1 -2 3 2 1 4 1 2 2 2 |
||||||||
|
样例输出 Sample Output
|
||||||||
|
5
1
0
|
||||||||
|
数据范围及提示 Data Size & Hint
|
||||||||
|
线段树。对于每个节点,维护三个值。sum,suml,sumr表示该点的最大连续和,最大前缀和和最大后缀和。
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long LL;
inline int read()
{
int x=,f=;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-;c=getchar();}
while(isdigit(c)){x=x*+c-'';c=getchar();}
return x*f;
}
const int oo=;
const int maxn=;
int n,q,a[maxn],x,y;
LL pre[maxn],sum[maxn],suml[maxn],sumr[maxn];
void build(int l,int r,int o)
{
if(l==r)
{
suml[o]=sumr[o]=sum[o]=pre[r]-pre[l-];
return;
}
int mid=(l+r)>>,lo=o<<,ro=lo+;
build(l,mid,lo);
build(mid+,r,ro);
sum[o]=max(sum[lo],sum[ro]);
sum[o]=max(sum[o],sumr[lo]+suml[ro]);
suml[o]=max(suml[lo],pre[mid]-pre[l-]+suml[ro]);
sumr[o]=max(sumr[ro],pre[r]-pre[mid]+sumr[lo]);
return;
}
LL queryl(int x,int y,int l,int r,int o)
{
if(x==l && y==r) return sumr[o];
int mid=(l+r)>>,lo=o<<,ro=lo+;
if(x>mid) return queryl(x,y,mid+,r,ro);
else
{
LL tmp=pre[r]-pre[mid]+queryl(x,mid,l,mid,lo);
return max(sumr[ro],tmp);
}
}
LL queryr(int x,int y,int l,int r,int o)
{
if(x==l && y==r) return suml[o];
int mid=(l+r)>>,lo=o<<,ro=lo+;
if(y<=mid) return queryr(x,y,l,mid,lo);
else
{
LL tmp=pre[mid]-pre[l-]+queryr(mid+,y,mid+,r,ro);
return max(suml[lo],tmp);
}
}
LL query(int x,int y,int l,int r,int o)
{
if(x<=l && y>=r)return sum[o];
int mid=(l+r)>>,lo=o<<,ro=lo+;
if(y<=mid) return query(x,y,l,mid,lo);
else if(x>mid) return query(x,y,mid+,r,ro);
else
{
LL ls,rs;
ls=queryl(x,mid,l,mid,lo);
rs=queryr(mid+,y,mid+,r,ro);
return max(max(query(x,mid,l,mid,lo),query(mid+,y,mid+,r,ro)),rs+ls);
}
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
n=read();q=read();
for(int i=;i<=n;i++)a[i]=read(),pre[i]=pre[i-]+a[i];
build(,n,);
while(q--)
{
x=read();y=read();
LL tmp=query(x,y,,n,);
if(tmp<)tmp=;
printf("%lld\n",tmp);
}
return ;
}
对于后三个点肯定没戏,毕竟线段树常数那么大。满分做法好像是整体二分,然而并不会,等着以后来填坑吧。
[冬令营Day1 T2]sequence的更多相关文章
- codevs 4511 信息传递(NOIP2015 day1 T2)
4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...
- 【NOIP2016 Day1 T2】天天爱跑步
题目传送门:https://www.luogu.org/problemnew/show/P1600 感觉这两天在处理边界问题上有点神志不清......为了从80的暴力变成100,花了整整一个下午+一个 ...
- 3728 联合权值[NOIP 2014 Day1 T2]
来源:NOIP2014 Day1 T2 OJ链接: http://codevs.cn/problem/3728/ https://www.luogu.org/problemnew/show/P1351 ...
- [NOIP2016 DAY1 T2]天天爱跑步-[差分+线段树合并][解题报告]
[NOIP2016 DAY1 T2]天天爱跑步 题面: B[NOIP2016 DAY1]天天爱跑步 时间限制 : - MS 空间限制 : 565536 KB 评测说明 : 2s Description ...
- 【NOIP2016】DAY1 T2 天天爱跑步
[NOIP2016]DAY1 T2 天天爱跑步 Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.?天天爱跑步?是一个养成类游戏,需要玩家每天按时 ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 【 NOIP2015 DAY1 T2 信息传递】带权并查集
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 【NOIP2015提高组】 Day1 T2 信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 【NOIP 2016】Day1 T2 天天爱跑步
Problem Description 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任 ...
随机推荐
- Elasticsearch由浅入深(五)_version乐观锁、external version乐观锁、partial update、groovy脚本实现partial update
基于_version进行乐观锁并发控制 先构造一条数据出来 PUT /test_index/test_type/ { "test_field": "test test&q ...
- 基于Django的Rest Framework框架的RESTful规范研究
一.什么是RESTful规范 总的来说:RESTful规范就是一个非技术,人为约定的一个面向资源的架构理念. REST与技术无关,代表的是一种软件架构风格,REST是Representational ...
- Java判断Integer类型的值是否相等
我们知道Integer是int的包装类,在jdk1.5以上,可以实现自动装箱拆箱,就是jdk里面会自动帮我们转换,不需要我们手动去强转,所以我们经常在这两种类型中随意写,平时也没什么注意 但Integ ...
- 结合Spring实现策略模式
最近系统需要对不同维度的数据进行差异化计算,也就会使用不同算法.为了以后更加容易扩展,结合Spring框架及策略模式对实现架构做了系统设计. 1. 定义策略接口(Strategy): import c ...
- SpringBoot2配置prometheus浏览器访问404
背景:SpringBoot2的项目要配置 actuator + prometheus的健康检查,按照教程配置好之后再浏览器测试 http://localhost:port/prometheus 后40 ...
- asp.net core ModelState 模型状态验证扩展类
using DMS.Common.BaseResult; using Microsoft.AspNetCore.Mvc.ModelBinding; using System; using System ...
- mac下mysql安装、卸载、基本操作
2018-06-08 10:57:26 张广森 阅读数 6584更多 分类专栏: mac mysql 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本 ...
- sql server报【从varchar数据类型到datetime数据类型的转换产生一个超出范围的值】错误的解决办法
产生这个错误的原因是在使用convert函数将给定的日期字符串转换为日期类型的时候,因为datetime这个数据类型有时间数值的范围限定,当超出时间范围时就抛出这个错误. 如果类型是[datetime ...
- 很好的OpenCV入门资料
https://files.cnblogs.com/files/mqingqing123/OpenCV%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B.rar
- ASP.NET Core+MongoDB(一)
项目类库:.Net Standar 2.0web:ASP.NET CORE 2.2 版本 先上图,看我们的解决方案结构: 分别对上面的工程进行说明:1.KYSharpCore:为公共的基础类,最底层 ...