题目传送门

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

代码如下:

#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. Hibernate课堂笔记

    1.java持久化概述 Java持久化简称(JPA), 即把程序中的临时数据持久保存到数据库中.由于jdbc开发效率低,我们就提出了对象关系映射(ORM)的概率 2.ORM 通过java持久化提供的A ...

  2. Cocos2d-x手游技术分享(1)-【天天打蚊子】数据存储与音效篇

    前言: 手游项目<天天打蚊子>终于上线,特地写几篇技术分享文章,分享一下其中使用到的技术,其中使用cocos2d-x引擎,首选平台iOS,也请有iPhone或者iPad的朋友帮忙下载好评. ...

  3. Linux 套接字编程 - TCP连接基础

    第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取) ...

  4. Java入门到精通——调错篇之Eclipse Java compiler level dose not match the version of the installed Java project

    一.错误现象. java项目显示红色,并且类中引用包中会报红色错误,在Eclipse下面显示下面错误提示如图: 二.错误原因. 通过字面意思一看就很明白java的版本不对. 三.解决办法. 3.1右键 ...

  5. JSTL核心库

    1 out和set(重点) out <c:out value=”aaa”/> 输出aaa字符串常量 <c:out value=”${aaa}”/> 与${aaa}相同 < ...

  6. 龙珠直播之swot

    版本 v 0.3 龙珠直播有品牌优势,依托于苏宁PPTV,有大背景,有体育视频资源可用. 龙珠内容没有特色,没有特别火的亮点,定位于体育,没有免费路线,不能吸引大量活跃用户,女主播方式也没十分特点,解 ...

  7. python 02/100例

    题目 输入某年某月某日,判断这一天是这一年的第几天? 分析 例如:2018年6月19日 天数 = 19天 + 一月天数 + 2月天数 + ... + 6月天数 注意 闰年的2月是29天,如果年份是闰年 ...

  8. python 整形方法

    1. int() a = ' print(type(a), a) b = int(a) print(type(b), b) # 输出 <class 'str'> 123 <class ...

  9. Ubuntu adb device

    在ubuntu上经常出现系统无法识别android手机的情况,要解决这个问题可以用以下方法: 1. 执行 "android update adb", 这会创建"~/.an ...

  10. POJ-3484 Showstopper---二分+前缀和

    题目链接: https://cn.vjudge.net/problem/POJ-3484 题目大意: 给出一系列等差数列,给出第一项和最后一项和公差 这些等差数列中每个数出现的次数只有一个是奇数,找出 ...