COGS 775 山海经

思路:

求最大连续子段和(不能不选),只查询,无修改。要求输出该子段的起止位置。

线段树经典模型,每个节点记录权值和sum、左起最大前缀和lmax、右起最大后缀和rmax、最大子段和dat即可。

要求输出起止位置,单独维护左右端点。注意权值相同要求l、r尽量小,所以相同时选左儿子不选右儿子,维护时考虑是否加等号。

Code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int n,m;
struct Tree{
int l,r,lid,rid,tl,tr;
ll sum,lmax,rmax,dat;
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define mid ((node[p].l+node[p].r)>>1)
}node[N<<2];
void upd(Tree &a,const Tree &b,const Tree &c){
a.sum=b.sum+c.sum;
if(b.sum+c.lmax>b.lmax){
a.lmax=b.sum+c.lmax;
a.tr=c.tr;
} else{
a.lmax=b.lmax;
a.tr=b.tr;
}
if(c.rmax>c.sum+b.rmax){
a.rmax=c.rmax;
a.tl=c.tl;
} else{
a.rmax=c.sum+b.rmax;
a.tl=b.tl;
}
if(c.dat>max(b.dat,b.rmax+c.lmax)){
a.dat=c.dat;
a.lid=c.lid;
a.rid=c.rid;
}
else{
if((b.dat>b.rmax+c.lmax)||(b.dat==b.rmax+c.lmax&&b.lid<=b.tl)){
a.dat=b.dat;
a.lid=b.lid;
a.rid=b.rid;
}
else{
a.dat=b.rmax+c.lmax;
a.lid=b.tl;
a.rid=c.tr;
}
}
}
void build(int p,int l,int r){
node[p].l=l;node[p].r=r;
if(l==r){
scanf("%lld",&node[p].sum);
node[p].dat=node[p].lmax=node[p].rmax=node[p].sum;
node[p].lid=node[p].rid=node[p].tl=node[p].tr=l;
return;
}
build(ls(p),l,mid);
build(rs(p),mid+1,r);
upd(node[p],node[ls(p)],node[rs(p)]);
}
Tree query(int p,int L,int R){
if(L<=node[p].l&&node[p].r<=R) return node[p];
Tree ans;
if(R<=mid) ans=query(ls(p),L,R);
else if(L>mid) ans=query(rs(p),L,R);
else upd(ans,query(ls(p),L,R),query(rs(p),L,R));
return ans;
}
int main(){
scanf("%d%d",&n,&m);
build(1,1,n);
for(int i=1,l,r;i<=m;++i){
scanf("%d%d",&l,&r);
Tree ans=query(1,l,r);
printf("%d %d %lld\n",ans.lid,ans.rid,ans.dat);
}
return 0;
}

COGS 775 山海经的更多相关文章

  1. 【cogs 775】山海经 ——Segment Tree

    题目链接:      TP 题解:   我数据结构真心是弱啊= =. 线段树好厉害啊,一直不会区间最大连续和,今天刚学习了一下233. 维护前缀最大和后缀最大,越界最大(?),再维护一个区间最大,瞎搞 ...

  2. [COGS 755]山海经:线段树

    网上似乎这道题的题解很少?写一个吧 我跟这道题的渊源追溯到了上个学期刚刚学线段树的那一天... 当时线段树专题前边的题都是一些板子就不一会就水过了,然后就看到了最后一题的它:山海经 那一个上午,我竭尽 ...

  3. 【COGS 254】【POI 2001】交通网络图

    http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...

  4. 【COGS】894. 追查坏牛奶

    http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...

  5. 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)

    http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...

  6. 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)

    http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...

  7. 【COGS & USACO】896. 圈奶牛(凸包)

    http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...

  8. 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)

    http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...

  9. Cogs 97. [NOIP2007] 树网的核 Floyd

    题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆   输入文件:core.in   输出文件:core ...

随机推荐

  1. LuceneNet 搜索一

    1.引用读取PDF文件组件 FontBox-0.1.0-dev.dll IKVM.GNU.Classpath.dll IKVM.Runtime.dll PDFBox-0.7.3.dll 2.添加off ...

  2. 基于bootstrap框架在ie8以下,兼容媒体查询[css样式]

    <style type="text/css"> /*基于bootstrap框架在ie8以下,兼容媒体查询*/ .row [class^="col-" ...

  3. zabbix自定义监控redis

    zabbix监控redis脚本 #!/bin/bash #此脚本用来获取redis-cli info信息 redis_cli="/usr/local/redis/bin/redis-cli& ...

  4. 使用Jedis操作Redis-使用Java语言在客户端操作---List类型

    在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis将为该键创建 ...

  5. 项目中的那些事---Java反射的应用

    最近工作中遇到一个这样的问题: 为某个项目中的所有接口做一个测试工具,使用java Swing技术,该项目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本. 于是就引入了这样 ...

  6. Ubuntu18.04 修改IP地址、查看网关、防火墙

    1. Ubuntu18.04 修改IP地址 修改 sudo vim /etc/netplan/50-cloud-init.yaml文件 # This file is generated from in ...

  7. Docker Mysql部署

    1.下载tomcat镜像 docker pull mysql 2.启动容器 docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD ...

  8. JavaScript 中的多线程通信的方法

    在Html 5诞生之后,我们可以使用javascript来实现多线程处理.H5 新增了一个web workers api,使用这个API,用户可以很容易地创建在后台运行的线程,H5 中被称为workd ...

  9. 启动Hadoop时,DataNode启动后一会儿自动消失的解决方法

    查看slaver1/2的logs,发现 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for ...

  10. web前端学习(二)html学习笔记部分(4)--audio和video文件播放

    1.2.10  html5音频 1.2.10.1  HTML5音频播放 本课主要讲解HTML5播放音频 <!--<button onclick="clickA"> ...