题目

传送门:QWQ

分析

线段树维护一下最大子序列

维护一下最大前缀 最大后缀  区间和 就ok了

好像只能用结构体。。。。。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int val[maxn<<] ;
struct Node{
int left,right,maxv,sum;
}tree[maxn<<];
void update(int o,int l,int r){
tree[o].sum=tree[o<<].sum+tree[o<<|].sum;
tree[o].left=max(tree[o<<].left,tree[o<<].sum+tree[o<<|].left);
tree[o].right=max(tree[o<<|].right,tree[o<<|].sum+tree[o<<].right);
tree[o].maxv=max(tree[o<<].right+tree[o<<|].left,max(tree[o<<].maxv,tree[o<<|].maxv));
}
void build(int o,int l,int r){
if(l==r){tree[o].sum=tree[o].left=tree[o].right=tree[o].maxv=val[l];return;}
int mid=l+r>>;
build(o<<,l,mid); build(o<<|,mid+,r);
update(o,l,r);
}
void modify(int o,int l,int r,int v,int L){
if(l>L||r<L) return;
if(l==r){ tree[o].sum=tree[o].left=tree[o].right=tree[o].maxv=v; return;}
int mid=l+r>>;
modify(o<<,l,mid,v,L); modify(o<<|,mid+,r,v,L);
update(o,l,r);
}
Node query(int o,int l,int r,int L,int R){
if(L<=l&&R>=r) return tree[o];
int mid=l+r>>;
if(R<=mid) return query(o<<,l,mid,L,R);
else if(L>mid) return query(o<<|,mid+,r,L,R);
else{
Node res1=query(o<<,l,mid,L,R),res2=query(o<<|,mid+,r,L,R);
Node res;
res.sum=res1.sum+res2.sum;
res.left=max(res1.left,res1.sum+res2.left);
res.right=max(res2.right,res2.sum+res1.right);
res.maxv=max(res1.right+res2.left,max(res1.maxv,res2.maxv));
return res;
}
} int main(){
int n,m;scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&val[i]);
build(,,n);
int k,a,b;
while(m--){
scanf("%d%d%d",&k,&a,&b);
if(k==){if(a>b) swap(a,b); printf("%d\n",query(,,n,a,b).maxv);}
else modify(,,n,b,a);
}
}

【BZOJ】1756: Vijos1083 小白逛公园(线段树)的更多相关文章

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

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

  2. BZOJ 1756: Vijos1083 小白逛公园

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

  3. [日常摸鱼]Vijos1083小白逛公园-线段树

    题意:单点修改,询问区间最大子段和,$n\leq 5e5$ 考虑分治的方法$O(nlogn)$求一次最大子段和的做法,我们是根据中点分成左右两个区间,那么整个区间的答案要么是左边答案,要么是右边答案, ...

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

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

  5. [vijos]1083小白逛公园<线段树>

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

  6. P4513 小白逛公园 (线段树)

    题目链接 Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 \(4\) 个变量: \(amx\) 代表当前节点的最大值. \(lmx\) 代表当前节点以左端点为起点的区间最大值. ...

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

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

  8. 【线段树】bzoj1756 Vijos1083 小白逛公园

    我们知道,求一段序列的最大子段和是O(n)的,但是这样是显然会超时的. 我们需要一个数据结构来支持修改和计算的操作,对于这种修改一个而查询区间的问题,考虑使用线段树. 在线段树中,除了左端点,右端点, ...

  9. bzoj1756 Vijos1083 小白逛公园

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

随机推荐

  1. python 返回系统位数

    # For bit it will and bit it will import struct print()

  2. iOS开发网络篇—Socket编程

    一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程 ...

  3. angular大牛的博客

    对angular的了解比亲娘还了解,http://each.sinaapp.com/angular/index.html 对angular比较深入的研究,这个人的所有博客都值得一看,这是7. http ...

  4. appium+pytest+allure+jenkins 如何实现多台手机连接

    使用appium可以实现app自动化测试,我们之前是连接一台手机去运行,如何同时连接多台手机呢?很多人可能想到的是多线程(threading).今天分享一种比多线程更简单的方法,虽然不是多台手机同时运 ...

  5. UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)

    题目大意:给一张无向图,求出最小树形图. 题目分析:套朱-刘算法模板就行了... 代码如下: # include<iostream> # include<cstdio> # i ...

  6. C# 简单生成双色球代码

    红球篮球产生代码 public class TestD { //产生几组数据 public void getzhu( int num) { ; m < num; m++) { getred(); ...

  7. New Concept English Two 26 70

    $课文68  纠缠不休 712. I crossed the street to avoid meeting him, but he saw me and came running towards m ...

  8. python 之 多线程、多进程代码

    thread-多线程 multiprocessing-多进程 #!/usr/bin/python # -*- coding:utf-8 -*- import os import threading i ...

  9. 用 Unity 和 HTC Vive 实现高级 VR 机制(1)

    原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...

  10. 【转】Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法

    chmod是更改文件的权限 chown是改改文件的属主与属组 chgrp只是更改文件的属组. 一.文件权限解读 如上图所示,开头的-rwxrw-r--这一字符串标识文件权限. 这个字符串有10位,可以 ...