题目传送门

这道题是一道线段树的一个求一个连续最大字段和是一个区间线段树一个很妙妙的操作,这里后面我们后面就会提到,因为今天博主没有时间了所以先粘一篇代码供大家参考,其实代码理解还是非常的简单的。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct data{
int rmax,lmax,maxtot,sum;
int l,r,son[2];
}node[1010000];
int ini[501000];
int n,k;
int cnt=0;
void update(int k)
{
node[k].sum=node[node[k].son[0]].sum+node[node[k].son[1]].sum;
node[k].lmax=max(node[node[k].son[0]].lmax,node[node[k].son[0]].sum+node[node[k].son[1]].lmax);
node[k].rmax=max(node[node[k].son[1]].rmax,node[node[k].son[1]].sum+node[node[k].son[0]].rmax);
node[k].maxtot=max(node[node[k].son[0]].maxtot,node[node[k].son[1]].maxtot);
node[k].maxtot=max(node[k].maxtot,node[node[k].son[0]].rmax+node[node[k].son[1]].lmax);
}
void Build_tree(int &k,int l,int r)
{
cnt++;
k=cnt;
node[k].l=l;node[k].r=r;
if(l==r)
{
node[k].sum=ini[l];node[k].lmax=ini[l];node[k].rmax=ini[l];node[k].maxtot=ini[l];return;
}
int mid=(l+r)/2;
Build_tree(node[k].son[0],l,mid);
Build_tree(node[k].son[1],mid+1,r);
update(k);
}
void modify(int k,int goal,int val)
{
if(node[k].l==node[k].r&&node[k].l==goal)
{
node[k].sum=val;node[k].lmax=val;node[k].rmax=val;node[k].maxtot=val;
}
else
{
int mid=(node[k].l+node[k].r)/2;
if(mid>=goal)
modify(node[k].son[0],goal,val);
else
{
modify(node[k].son[1],goal,val);
}
update(k);
}
}
data query(int k,int l,int r)
{
if(node[k].l==l&&node[k].r==r)
{
return (data){node[k].rmax,node[k].lmax,node[k].maxtot,node[k].sum,0,0,0,0};
}
else
{
int mid=(node[k].l+node[k].r)/2;
if(r<=mid) return query(node[k].son[0],l,r);
if(l>mid) return query(node[k].son[1],l,r);
else
{
data d1=query(node[k].son[0],l,mid);
data d2=query(node[k].son[1],mid+1,r);
data ret;
ret.sum=d1.sum+d2.sum;
ret.lmax=max(d1.lmax,d1.sum+d2.lmax);
ret.rmax=max(d2.rmax,d1.rmax+d2.sum);
ret.maxtot=max(d1.maxtot,d2.maxtot);
ret.maxtot=max(ret.maxtot,d1.rmax+d2.lmax);
return ret;
}
}
}
int main()
{ scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i)
{
scanf("%d",&ini[i]);
}
int root=0;
Build_tree(root,1,n);
int a,b,c;
for(int i=1;i<=k;++i)
{
scanf("%d%d%d",&a,&b,&c);
if(a==2)
{
modify(1,b,c);
}
else
{
if(b>c)
{int a;a=b;b=c;c=a;}
cout<<query(1,b,c).maxtot<<endl;
}
}
return 0;
}

【解题报告】小白逛公园 vijos的更多相关文章

  1. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

  2. Bzoj 1756: Vijos1083 小白逛公园 线段树

    1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1021  Solved: 326[Submit][Statu ...

  3. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  4. JDOJ-P1260 VIJOS-P1083 小白逛公园

    首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec  Memor ...

  5. 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园

    题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...

  6. 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)

    P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...

  7. vijos1083:小白逛公园

    小白逛公园 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的 ...

  8. 小白逛公园加强版(park)

    小白逛公园加强版(park) 题目描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦--在小新家附近有n个公园,这些公园通过一些路径相连,并保证每两个公园之间有且仅有一条通路相连(也就是说这是一棵树), ...

  9. Vijos 1083 小白逛公园(线段树)

    线段树,每个结点维护区间内的最大值M,和sum,最大前缀和lm,最大后缀和rm. 若要求区间为[a,b],则答案max(此区间M,左儿子M,右儿子M,左儿子rm+右儿子lm). ----------- ...

随机推荐

  1. NIOSocket Server Client

    最近在看Netty框架,顺便写了一下NIO SocketChannel服务端和客户端 Server.java import java.io.IOException; import java.net.I ...

  2. js之箭头函数

    原文 ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: ...

  3. 【代码笔记】Java连连看项目的实现(1)——JTable 、TableModel的使用

    javax.swing.table.TableModel和javax.swing.JTable JTable .TableModel是Java里面画表格的包. TableModel:为Table提供显 ...

  4. Linux中怎么从root用户切换到普通用户

    su是在用户间切换,可以是从普通用户切换到root用户, test@ubuntu:~$ su Password:  root@ubuntu:/home/test# 也可以是从root用户切换到普通用户 ...

  5. network embedding 需读论文

    Must-read papers on NRL/NE. github: https://github.com/nate-russell/Network-Embedding-Resources NRL: ...

  6. javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法

    今天不用eclipse.myeclipse等开发工具,纯手写JSP页面(有点作死)时突然出现以前从来没遇到过的问题,报错如下: HTTP Status 500 - java.lang.NoClassD ...

  7. Swing入门学习

    工作以来,一直都是基于java web方向的开发,并没有java方向GUI相关的开发经验,不过好在之前用过winform开发.有了基础的套路,想来搞一下Swing也没有什么压力!到网上搜了一下相关的学 ...

  8. Mantis中的状态

    在 Mantis中的 问题状态一共有以下几种 10:new,20:feedback,30:acknowledged,40:confirmed,50:assigned,80:resolved,90:cl ...

  9. C# WinForm 程序免安装 .NET Framework(XP/win7/win10环境运行)

    前文 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭建虚拟机在xp环境 使用anyexec运行winfrom程序后,测试通过,如下是用的xp运行winfro ...

  10. 再学UML-UML用例建模解析(三)

    2. 编写用例文档 绘制用例图只是完成了用例建模最基本也是最简单的一步,用例建模的核心在于编写用例文档,用例文档又称为用例规约或用例描述.顾名思义,用例文档是用于描述用例的文档,每一个用例对应于一个用 ...