当前位置: 首页 > news >正文

Codevs 3981 动态最大子段和

目录

  • 题目
  • 思路
  • 详细讲解
  • $Code$

题目

思路

求$bss$的板子

详细讲解

$\text{To be continued}$

$Code$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define MAXN 200000
using namespace std;
long long n,m;
struct node{
    int l,r;
    long long w,lmax,rmax,maxx;
    void clear(){
        lmax=rmax=maxx=w=-0x7fffffff;
    }
}tree[MAXN*4];
inline long long read(){
    long long x=0;bool f=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return f?-x:x;
}
void build(int l,int r,int now){
    tree[now].l=l,tree[now].r=r;
    if(tree[now].l==tree[now].r){
        tree[now].w=read();
        tree[now].lmax=tree[now].rmax=tree[now].maxx=tree[now].w;
        return;
    }
    int mid=(tree[now].l+tree[now].r)>>1;
    build(l,mid,now<<1),build(mid+1,r,now<<1|1);
    tree[now].w=tree[now<<1].w+tree[now<<1|1].w;
    tree[now].maxx=max(tree[now<<1].maxx,tree[now<<1|1].maxx);
    tree[now].maxx=max(tree[now].maxx,tree[now<<1].rmax+tree[now<<1|1].lmax);
    tree[now].lmax=max(tree[now<<1].lmax,tree[now<<1].w+tree[now<<1|1].lmax);
    tree[now].rmax=max(tree[now<<1|1].rmax,tree[now<<1|1].w+tree[now<<1].rmax);
}
node ask_range(long long x,long long y,int now){
    if(tree[now].l>=x&&tree[now].r<=y){
        return tree[now];
    }
    int mid=(tree[now].l+tree[now].r)>>1;
    if(y<=mid) return ask_range(x,y,now<<1);
    if(x>mid) return ask_range(x,y,now<<1|1);
    node lans,rans,ans;
    lans.clear(),rans.clear(),ans.clear();
    lans=ask_range(x,y,now<<1);
    rans=ask_range(x,y,now<<1|1);
    ans.w=lans.w+rans.w;
    ans.maxx=max(lans.maxx,rans.maxx);
    ans.maxx=max(ans.maxx,lans.rmax+rans.lmax);
    ans.lmax=max(lans.lmax,lans.w+rans.lmax);
    ans.rmax=max(rans.rmax,rans.w+lans.rmax);
    return ans;
}

int main(){
    n=read();
    build(1,n,1);
    m=read();
    long long ans,x,y;
    while(m--){
        x=read(),y=read();
        ans=ask_range(x,y,1).maxx;
        printf("%lld\n",ans);
    }
    return 0;
}

转载于:https://www.cnblogs.com/poi-bolg-poi/p/11178511.html

相关文章:

  • A 小石的签到题
  • 又是问题~~~
  • Sql: 請假跨月份問題,或跨年份問題 日期部分边界
  • OpenFlow通信流程解读
  • React 入门与实战-课时7 虚拟DOM的本质和目的
  • sort函数和next_permutation()函数的用法。
  • 舵机控制原理
  • BZOJ1123 BLO
  • Mac下的PHP的配置与运行
  • 数据映射工具 AssionMapper
  • Navicat 连接MySQL 8.0.11 出现2059错误
  • 牛客练习赛33 C tokitsukaze and Number Game (结论+字符串处理)
  • 【知识库】-数据库_数据库事务与隔离级别
  • cpan 配置
  • 2-SAT(随意写点)
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Docker入门(二) - Dockerfile
  • Effective Java 笔记(一)
  • JavaScript创建对象的四种方式
  • JavaScript学习总结——原型
  • MySQL QA
  • SwizzleMethod 黑魔法
  • vue-router 实现分析
  • 安卓应用性能调试和优化经验分享
  • 多线程事务回滚
  • 聊聊hikari连接池的leakDetectionThreshold
  • 浏览器缓存机制分析
  • 学习使用ExpressJS 4.0中的新Router
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • #pragma multi_compile #pragma shader_feature
  • ()、[]、{}、(())、[[]]命令替换
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)c52学习之旅-中断
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Linux下编译安装log4cxx
  • (转载)虚函数剖析
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .axf 转化 .bin文件 的方法
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net IE10 _doPostBack 未定义
  • .NET 简介:跨平台、开源、高性能的开发平台
  • @EnableAsync和@Async开始异步任务支持
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @NestedConfigurationProperty 注解用法
  • [ SNOI 2013 ] Quare
  • [ 蓝桥杯Web真题 ]-布局切换
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android View] 可绘制形状 (Shape Xml)
  • [Angular] 笔记 7:模块
  • [C++进阶篇]STL中vector的使用