(CDOJ 844 线段树区间最大连续和 )<线段树的各种姿势>

Markdown编辑器介绍 这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。 阅读详情

Problem

给定一个序列,每个点有相应权值
有两种操作:
①修改某个点的权值
②查询给定区间的最大连续区间和


Solution

  • 首先要理解清楚题意,是在给定区间内求最大连续子序列。所以暴力的方法很简单,每次在给定区间上贪心地求即可。复杂度O(m∗n)
  • 优化一点可以用线段树
  • 线段树上维护4个值:区间总和s,从左端起的最大连续区间和ls,从右端起的最大连续区间和rs,整个区间最终的最大连续区间和ms。
  • pushup操作

ⅰ ls的修改

可以更新为左子树的ls,或者左子树的s+右子树的ls,分别对应第一条红线和第二条红线

ⅱ rs的修改
同ls的更新一样,可以更新为右子树的rs,或者右子树的s+左子树的ls
目的是保证从端点开始

ⅲ ms的修改
正常的情况是更新为左右子树的max(ms),但是有一种特殊情况:
左子树的rs和右子树的ls是连续的,因此有可能左子树的rs+右子树的ls的值更大
所以一共三种情况

ⅳ s的修改
很简单,把左右子树的s加起来即可
一般来说求最值不需要记录区间和,但这个问题涉及到区间的交并,s可以用于解决完全包含某个子区间的问题(如ls,rs的修改时)

  • query是这个题最难的部分
    ⅰ 同样要维护4个全局变量:区间最大连续子序列anss(即最终答案),从左端点开始的最大连续子序列ansl,从右端点开始的最大连续子序列ansr,已经更新过的区间和sum(同样需要区间和来帮助询问答案)
    ⅱ 线段树一个很重要的性质是:每次更新或者询问一定是先处理左子树,后处理右子树,因此sum维护的是从询问区间最左端到当前区间的区间和,利用sum可以很巧妙的维护其它3个的值
    ⅲ 具体实现的方法
    if(ll<=L&&rr>=R){
        ansl=max(ansl,sum+t[pos].ls);//不更新,或者更新为:左面所有的值的和sum+当前区间的ls,利用线段树更新的顺序是先左后右,可以确保ansl维护的值是从最左端开始的
        anss=max(ansl,anss);
        anss=max(anss,t[pos].ms);
        anss=max(anss,ansr+t[pos].ls);
        ansr=max(ansr+t[pos].s,t[pos].rs);//同样利用sum的性质更新
        anss=max(ansr,anss);
        sum+=t[pos].s;
        return;
    }

ⅳ 最后需要注意的是,ansr的更新必须放在anss之后,因为如果先更新ansr,那么ansr的值有可能会包含当前区间的值,这样会造成重复

Code

// by spli
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;

const int N=500010;
const LL inf=100000000ll;
int n,m;
struct seg{
    int L,R;
    LL s,ms,ls,rs;
}t[N*4+5];
LL ansl=-inf,ansr=-inf,anss=-inf,sum=0;

void pushup(int pos){
    t[pos].s=t[pos<<1].s+t[pos<<1|1].s;
    t[pos].ms=max(t[pos<<1].ms,max(t[pos<<1|1].ms,t[pos<<1].rs+t[pos<<1|1].ls));
    t[pos].ls=max(t[pos<<1].ls,t[pos<<1].s+t[pos<<1|1].ls);
    t[pos].rs=max(t[pos<<1|1].rs,t[pos<<1|1].s+t[pos<<1].rs);
}

void build(int pos,int L,int R){
    t[pos].L=L;
    t[pos].R=R;
    if(L==R){
        scanf("%lld",&t[pos].s);
        t[pos].ms=t[pos].ls=t[pos].rs=t[pos].s;
        return;
    }
    int mid=(L+R)>>1;
    build(pos<<1,L,mid);
    build(pos<<1|1,mid+1,R);
    pushup(pos);
}

void update(int pos,int k,int v){
    int L=t[pos].L;
    int R=t[pos].R;
    if(L==R){
        t[pos]=(seg){L,R,v,v,v,v};
        return;
    }
    int mid=(L+R)>>1;
    if(k<=mid) update(pos<<1,k,v);
    else update(pos<<1|1,k,v);
    pushup(pos);
}

void query(int pos,int ll,int rr){
    int L=t[pos].L;
    int R=t[pos].R;
    if(ll>R||L>rr) return;
    if(ll<=L&&rr>=R){
        ansl=max(ansl,sum+t[pos].ls);
        anss=max(ansl,anss);
        anss=max(anss,t[pos].ms);
        anss=max(anss,ansr+t[pos].ls);
        ansr=max(ansr+t[pos].s,t[pos].rs);
        anss=max(ansr,anss);
        sum+=t[pos].s;
        return;
    }
    int mid=(L+R)>>1;
    query(pos<<1,ll,rr);
    query(pos<<1|1,ll,rr);
}

int main(){
    scanf("%d%d",&n,&m);
    build(1,1,n);
    int k,x,y;
    for(int i=1;i<=m;++i){
        scanf("%d%d%d",&k,&x,&y);
        if(k==1){
            anss=ansl=ansr=-inf;sum=0;
            query(1,x,y);
            printf("%lld\n",anss);
        }
        if(k==2) update(1,x,y);
    }
    return 0;
}
Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图! vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实 阅读详情

相关推荐

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

P4513 小白逛公园(线段树 + 连续区间和最值)

洛谷 P4513 小白逛公园(线段树 + 连续区间和最值)

2301_76575887的博客 1150

nrf52840的uart0与uart1双串口使用

nrf52840的uart0与uart1双串口使用 项目原使用nrf52832,后面由于项目需要用到双串口,改用nrf52840,官方的例程没看到使用uart1的,找遍全网都没找到uart1的使用资料,有些不负责任的网文居然说40也只有一个uart,吓得俺赶紧又查看了一次datesheet,O得K、木鸭梨 SDK代码uart驱动中,搜索到uart1的驱动部分,说明官方驱动有uart1支持的 自己动手,丰衣足食吧,下面以nRF5_SDK_17.0.0_9d13099版本,在examples\ble_per

chhen168的博客 5625

动态求连续区间和(线段树 树状数组)

如果不是叶子节点,那么先求中点,建左子树(l到mid),建右子树(mid+1到r)1️⃣如果所求区间左节点小于或等于mid,去查询这个左区间的值 ,并加到sum中。2️⃣如果所求区间右节点大于mid,去查询这个右区间的值,并加到sum中。如果是叶子节点,赋值结构体的左区间,右区间,值。向上更新,建树,求区间和,修改节点值。如果目标节点 mid 向右寻找。如果这个区间被覆盖,直接返回值。如果找到节点 直接加上目标值。如果没有被覆盖,求中间节点。最后向上更新pushup。

weixin_74749489的博客 375

汽车OBD接口实战:如何用STM32读取CAN总线数据(附完整代码)

本文详细介绍了如何利用STM32微控制器通过汽车OBD接口读取CAN总线数据的完整实战方案。内容涵盖硬件连接(如OBD引脚定义与TJA1050收发器接线)、STM32的CAN外设初始化与滤波器配置,并深入解析OBD-II诊断协议,演示了如何请求和解析发动机转速、车速等关键数据。文末提供了构建稳定数据读取系统的代码框架与错误处理建议,为嵌入式开发者和汽车电子爱好者提供了从零到一的实践指南。

9q8w7e6r5的博客 297

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

HDU1540——线段树维护连续区间

题目链接:https://vjudge.net/problem/HDU-1540#author=cqbzguomao Description 在抗日战争期间,华北平原广大地区进行了大规模的隧道战。 一般来说,通过隧道连接的村庄排成一列。 除了两端,每个村庄都与两个相邻的村庄直接相连。 入侵者经常对一些村庄发动袭击并摧毁其中的部分隧道。 八路军指挥官要求最新的隧道和村庄连接状态。 如果某些...

mumei的博客 345

华为2288H-V5服务器做raid的详细步骤

操作步骤 服务器启动界面 按del键进入设置输入密码,2288H-v5默认密码是Admin@9000 移动光标选择device manager 驱动管理选择configurationutility 配置管理 选择main menu 主菜单 选择第一个 configuration management 配置管理 选择create virtual driver 创建虚拟驱动选择select RAID level 选择RAID等级选择level-5 选择select drivers 选择驱......

weixin_46041124的博客 1万+

三种解法求:最大连续子序列的和

示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6。 一、贪心思想 假设a[l]...a[r]的和为 sum 如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留 如果 sum <0,则说明 sum 对结果无增益效果,需要舍弃 明白了这个道理,那么对于第i个数来说,我们查看他之前的sum,如果sum<0,那么当前的最大连续子序列和就是它本身(舍弃前面的);如果sum&gt...

马小超 1万+

【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦

好了,关于 【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。1、手动下载对应版本到 pyenv-win\install_cache 目录(如上手动操作安装步骤,文件名需匹配,如 python-3.10.0-amd64.exe)。该指令会列出,pyenv包管理工具所支持的所有python版本,

Spring Boot-Common On With You 852

由Sensor光谱响应曲线联想到的白平衡增益计算

由Sensor光谱响应曲线联想到的白平衡增益计算 由于传感器硬件的限制,传感器在某个预定波长范围内的响应不可能是100% 响应。现实中都是类似于正态分布的单峰函数。如果仅做粗略计算,由一个中心波长和半高宽(也成半波宽)完全可以由数学公式计算出一个高斯分布曲线。这个分布曲线就叫波谱响应函数。 波谱响应函数反映了传感器通道获取能量的情况。实际上每个传感器厂商都提供了具体的光谱响应函数,一般由两列数据组成,一列数据是波长,另一列数据是相对响应强度。下图某sensor光谱的响应的波谱响应函数。 ...

大熊 7490

最大连续区间和算法详解+代码

写在前边 本篇主要记录了最大连续区间和的暴力算法和dp算法(三种写法) 以及讲解了求最大区间和的区间左右下标的方法 ----------------------------------------------------------------------------------- 问题概述 这是一个经典的问题。 给定一个长度为n的序列a[1],a[2]...a[n-1],a[n] ...

1900的博客 8144

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CDOJ 844 线段树区间最大连续和

程序设计竞赛 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) “你动规无力,图论不稳,数据结构松散,贪心迟钝,没一样像样的,就你还想和我同台竞技,做你的美梦!今天这场比赛,就是要让你知道你是多么的无能!!” 不训练,无以为战。有nn项能力是ACM竞赛

qq_38136552的博客 532

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

cdoj844-程序设计竞赛 (线段树的区间最大连续和)【线段树】

http://acm.uestc.edu.cn/#/problem/show/844 程序设计竞赛 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) SubmitStatus “你动规无力,图论不稳,数据结构松散,贪心迟钝,没一样像样的,就你...

weixin_30767921的博客 104

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CDOJ_844 程序设计竞赛

原题地址:http://acm.uestc.edu.cn/#/problem/show/844 “你动规无力,图论不稳,数据结构松散,贪心迟钝,没一样像样的,就你还想和我同台竞技,做你的美梦!今天这场比赛,就是要让你知道你是多么 的无能!!” 不训练,无以为战。有n项能力是ACM竞赛要求的,训练则能提升,忽略则会荒废。 这m天,你能做到如何。 Input 第...

weixin_30622181的博客 99

UESTC 844 程序设计竞赛 【维护值稍多的线段树】

【题目大意】 维护一个序列,使之支持一下两种操作: 1、单点修改 2、查询一个区间子区间最大值(在某个区间中任意寻找一段连续子区间,使得该子区间的和最大)(以下将该值称为‘答案’) 【解题思路】 线段树做法: 考虑维护四种和:sum,suml,sumr,subsum,分别是区间和,左端点开始连续最大和(以下将该值称为‘左始和’),右端点结束连续最大和(以下将该值称为‘右结和’),答案

Lannister_Stark的博客 623

待写

线段树 区间合并 CDOJ844  POJ3667 HDU3308 HDU1540

ACUNSTOPPABLE 226

CDOJ 838 母仪天下 树状数组 (2014数据结构专题

母仪天下 Time Limit: 1 Sec  Memory Limit: 162 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/838 Description 富庶的建业城中,有一条格格不入的长街,名曰跳蚤街,被战争所致的孤儿,聚集于此。全国的经济都在为战争服务之时,也无人顾得了这里了。 除了两位夫人。 ...

weixin_34307464的博客 192

最大连续区间和的算法总结

最大连续区间和是一个经典的问题。给定一个长度为n的序列a[1],a[2]...a[n-1],a[n],求一个连续的子序列a[i],a[i+1]...a[j-1],a[j],使得a[i]+a[i+1]...a[j-1]+a[j]最大。①最简单最容易想到的就是根据定义来枚举。枚举上下界{i,j | 0<=i<=j<=n},维护一个max值即可。其中枚举上下界的时间复杂度为O...

weixin_30732825的博客 377

最大连续区间和问题

问题:在数字串中,每次在不重复的数上加0 ~ n个x,每次加x都是独立的,并且求每次最大的子串和。 #include<bits/stdc++.h> #define ll long long using namespace std; const int N = 5005; int f[N][N];//f[i][j]表示以i结尾的、给j个元素添加x后的最大连续数组和 void solve(){ int n,x; cin>>n>>x; for(i

glide的博客 461

线段树之区间最大连续和问题

问题:对于一颗线段树,每次询问[L,R],求此区间中任意一段连续序列,此连续序列和最大。 解法:每个节点维护4个值: max:此区间内的最大连续和 sum:该节点以下的节点值得总和 lmax:此区间的从左端开始的最大连续和 rmax:此区间的从右端开始的最大连续和 合并区间时,该区间的最大连续和为:max(左子节点的最大连续和,右子节点的最大连续和,左子节点的最大右连续...

weixin_30278311的博客 301

hdu3911(线段树区间异或+区间和并+查询最区间大连续1的个数)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 题意:给定序列(只有0,1),修改是将0变成1,1变成0,询问是查询区间最大连续1的数目。 用线段树维护7个变量: 第1,2个是区间的最大前缀0,和前缀1 第3,4个是区间的最大后缀0,和后缀1 第5,6个是区间的最大连续0,和最大连续1 第7个是lazy(区间更新必备) 由于我们存了...

weixin_30646315的博客 431

E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)

E. Sign on Fence 给定一个长度为nnn的数组aaa,1≤ai≤1091 \leq a_i \leq 10 ^ 91≤ai​≤109,有mmm次询问,每次给定l,r,kl, r, kl,r,k,要我们在[l,r][l, r][l,r]区间内找到一个长度为kkk的区间,使得区间最小值最大,输出最大值。 考虑二分答案,如果当前二分的区间是[l,r][l, r][l,r],我们把大于midmidmid的点,在数组中都设置为111,小于等于midmidmid的点,在数组中都设置为000, 考虑用线段树

lifehappy 669

线段树(以区间和为例)

​ 线段树的根节点是一个长区间,例如输入不超过N个的数,那么可以将根节点设为[1,N],它的左右子节点为均分父节点的两个区间,即左半区间和右半区间1⌊N12⌋⌊N12⌋1N1⌊2N1​⌋][⌊2N1​⌋1N,依次递归地建立,直到叶子节点,即区间ii[i,i]ii。

shiki217_的博客 1694
上一篇: (CF 148D Bag of mice)<简单概率DP>
下一篇: (poj 3667 Hotel)<丧病线段树区间合并>
SDFZspli
博客等级 码龄10年 17粉丝 80原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值