首页 > 其他分享 >P4513 小白逛公园

P4513 小白逛公园

时间:2024-10-13 13:22:16浏览次数:8  
标签:lc rsum sum rc 小白 lsum P4513 逛公园 include

题意:区间求区间内的连续最大值和进行点修改。思考如何转移状态方程用lsum来表示该区间内从左边开始的最大值,rsum为区间内从右边开始的最大值。sum为区间的和,而ans为区间内的最大值,
lsum可以由lc的lsum和lc.sum+rc.lsum得到,
而rsum可以由rc.rsum和rc.sum+lc.rsum得到,
而sum即为lc.sum+rc.sum,
而ans为lc.lsum和rc.rsum和lc.sum+rc.lsum和lc.rsum+rc.sum一个最大值,
查询的话查到的放到一个结构体里面最后返回结构体即可。

点击查看代码
#include <iostream>
#include <stack>
#include <cmath>
#include <algorithm>
#include <set>
#include <vector>
#include <climits>
#include <string.h>
#include <map>
#include <queue>
#include <list>
#include <cmath>
#include <iomanip> 
#define int long long 
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lc u<<1
#define rc u<<1|1
#define gcd __gcd
#define double long double
#define endl "\n"
#define INF LLONG_MAX
#define mod  1000000007
#define N 500005
const double PI = 3.14159265358979323846;
using namespace std;
int n, m,a[N];
struct Node {int l, r, lsum, rsum, ans, sum;}tr[N*4];
void pushup(int u)
{
    tr[u].sum = tr[lc].sum + tr[rc].sum;
    tr[u].ans = max({ tr[lc].ans,tr[rc].ans,tr[lc].rsum + tr[rc].lsum });
    tr[u].lsum = max(tr[lc].lsum, tr[lc].sum + tr[rc].lsum);
    tr[u].rsum = max({ tr[rc].rsum , tr[rc].sum + tr[lc].rsum});
}
void build(int u, int l, int r)
{
    tr[u] = { l,r,a[l],a[l],a[l],a[l] };
    if (l == r)return;
    int mid = l + r >> 1;
    build(lc, l, mid); build(rc, mid + 1, r);
    pushup(u);
}
void change(int u, int pos, int d)
{
    if (tr[u].l == tr[u].r)
    {
        tr[u].sum = tr[u].lsum = tr[u].rsum = tr[u].ans = d;
        return;
    }
    int mid = tr[u].l + tr[u].r >> 1;
    if (pos <= mid)change(lc, pos, d);
    else change(rc, pos, d);
    pushup(u);
}
Node query(int u, int l, int r)
{
    if (tr[u].l >= l && tr[u].r <= r)return tr[u];
    int mid = tr[u].l + tr[u].r >> 1,cnt=0;
    cnt += (l <= mid) + (r > mid);
    if (l <= mid && cnt == 1)return query(lc, l, r);
    if (r > mid && cnt == 1)return query(rc, l, r);
    Node cur, a, b;
    a = query(lc, l, r); b = query(rc, l, r);;
    cur.sum = a.sum + b.sum;
    cur.ans = max({ a.ans,b.ans,a.rsum + b.lsum });
    cur.lsum = max({ a.lsum,a.sum + b.lsum });
    cur.rsum = { max(b.rsum,b.sum + a.rsum) };
    return cur;
}
signed main()
{
    ios;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)cin >> a[i];
    build(1, 1, n);
    while (m--)
    {
        int op; cin >> op;
        if (op == 1)
        {
            int l, r; cin >> l >> r;
            if (l > r)swap(l, r);
            Node ans = query(1, l, r);
            cout << ans.ans << endl;
        }
        else
        {
            int p, s; cin >> p >> s;
            change(1,p,s);
        }
    }
    return 0;
}

标签:lc,rsum,sum,rc,小白,lsum,P4513,逛公园,include
From: https://www.cnblogs.com/youyong1/p/18462191

相关文章

  • 牛客小白月赛100 A~E
    牛客小白月赛100A~EA-ACM中的A题签到不多说//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;lla[N],b[N];intmain(){ios::sync_with_stdio(false);cin.ti......
  • 牛客小白月赛98 A~D
    牛客小白月赛98A~DA-骰子魔术签到不多说//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN=2e5+10;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr),cout......
  • 牛客小白月赛99 C~E
    牛客小白月赛99C~EC-迷宫思路:其实能不能到达,只要看起点和终点是否能变成连通的。射线技能只能用一次,我们在起点能到的点\((x,y)\)去\(check:x,y,x-1,y-1,y+1\)是否在终点能到达的点的坐标中出现。//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;......
  • 《Linux从小白到高手》综合应用篇:详解Linux系统调优之内存优化
    本篇介绍Linux服务器系统内存调优。内存是影响Linux性能的主要因素之一,内存资源的充足与否直接影响应用系统的使用性能。内存调优的主要目标是合理分配和利用内存资源,减少内存浪费,提高内存利用率,从而提升系统整体性能。1.内存相关重要命令及参数(不同版本略有区别,大家注意):......
  • 题解:牛客小白月赛102(A - C)
    A序列中的排列题意:每次给你两个正整数\(n,k\),并给你一段长度为\(n\)的序列。(所有输入均为小于等于100的正整数)问:原序列中是否存在子序列,使得这个子序列是\(k\)的排列子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的......
  • Python小白进阶篇之概率论2
    文章目录@[TOC](文章目录前言一、连续性随机变量分布连续型随机变量的特点:概率密度函数密度函数f(x)具有下列性质二、分布函数1.基本概念2.累积分布函数(CDF)3.CDF的性质4.不同类型随机变量的累积分布函数5.常见的分布5.1二项式分布5.2正态分布离散型随机变量函数的分......
  • 新手小白想快速上手Mac的使用必看问题
    相信不论是现在还是将来,肯定还是会有Mac小白的存在,对于大多数人来说,从小接触Windows的机会比较多,Windows的使用也是比较多,但是有些朋友在大学的时候想体验一下Mac的感觉,于是果断下单,又或者工作之后发现,Mac的高续航更适合自己,总之不管是何种原因,Mac能够拥有庞大的用户群体,自然是......
  • 【unity】内置鼠标监听方法(小白版)--当鼠标放置到技能按钮处显示该技能的描述
    为了实现鼠标放置到技能按钮处显示该技能描述的效果,参考了许多资料,由于我是初学者,研究了许久才看明白,现在分享一下学习心得。效果展示图代码如下usingUnityEngine;usingUnityEngine.EventSystems;usingUnityEngine.UI;publicclassSkillDataDisplay:MonoBehaviou......
  • SketchUp Pro 2024 for Mac 3D建模 草图设计大师软件安装【保姆级教程,简单小白轻松上
    Mac分享吧文章目录SketchUpPro3D建模草图设计大师软件安装完成,软件打开效果一、Mac中安装SketchUpPro3D建模草图设计大师软件——v241️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中3️⃣:应用程序,打开安装的应用软件文件夹,运行SketchUp.app4️⃣:任选示例模型,......
  • OmniPlan Pro for Mac 项目管理流程软件安装教程【保姆级教程,简单小白轻松上手】
    Mac分享吧文章目录OmniPlanPro项目管理流程软件安装完成,软件打开效果一、Mac中安装OmniPlanPro项目管理流程软件——v4.91️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中,并等待安装完成3️⃣:运行安装好的软件,显示下图后,Command+Q键退出软件4️⃣:打开下图软件,根......