值域线段树 bzoj 4627

【算法】值域线段树 简单介绍值域线段树 阅读详情

     这是题目链接4627: [BeiJing2016]回转寿司

题目大意:

给定n个数,求有多少个字段和在 满足 L<=sum<=R;

解题思路

需要解这个题目,需要有线段树加可持续化的思想,但是这个题目只需要上一棵线段树的信息,所以可以不用主席树,只要用到值域线段树。那么,这样就可以把问题转化为:

先处理处前缀和。 求 L<=sum[j]-sum[i]<=R (0 <=i < j<=n) 有多少个?

那么我们可以用值域线段树搞一下,线段树节点存值的个数,每次把前缀和这个值插入,每次查询,原问题就等同于 当前线段树中有多少个值是在 [ sum[j]-R , sum[j]-L ] 这个区间,

意思就是,每次把上一个前缀和插入需要计算一下上一棵线段树值在[ sum[j]-R , sum[j]-L ] 个数。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <iostream>
using namespace std;

typedef long long int LL;
const LL INF=10000000000ll;
const int maxn=100000*32;
struct ACM
{
    struct Node
    {
        LL val;
        int lson,rson;
    }seg[maxn];
    int sz;
    int newnode()
    {
        sz++;
        seg[sz].val=0;
        seg[sz].rson=-1;
        seg[sz].lson=-1;
        return sz;
    }
    void init()
    {
        sz=-1;
    }
    void update(int &root,LL l,LL r,LL val)
    {
        if(root==-1) root=newnode();
        seg[root].val++;
        if(l==r) return ;
        LL mid=(l+r)>>1;
        if(val<=mid) update(seg[root].lson,l,mid,val);
        else update(seg[root].rson,mid+1,r,val);
    }
    LL query(int root,LL l,LL r,LL ql,LL qr)
    {
        if(root==-1) return 0;
        if(l==ql&&r==qr) return seg[root].val;
        LL mid=(l+r)>>1;
        if(qr<=mid) return query(seg[root].lson,l,mid,ql,qr);
        else if(ql>mid) return query(seg[root].rson,mid+1,r,ql,qr);
        else return query(seg[root].lson,l,mid,ql,mid)+query(seg[root].rson,mid+1,r,mid+1,qr);
    }
    /**
    void debug(int i)
    {
        if(i==-1) return ;
        printf("node=%d val=%lld lson=%d rson=%d\n",i,seg[i].val,seg[i].lson,seg[i].rson);
        debug(seg[i].lson),debug(seg[i].rson);
    }
    */
}AC;

int main()
{
    int n,L,R,root=-1;
    scanf("%d%d%d",&n,&L,&R);
    LL sum=0,ans=0;
    AC.init();
    for(int i=1; i<=n; i++)
    {
        int num;
        scanf("%d",&num);
        AC.update(root,-INF,INF,sum);
        sum+=num;
        ans+=AC.query(root,-INF,INF,sum-R,sum-L);
    }
    printf("%lld\n",ans);
    return 0;
}
最长上升子序列 + 优化(线段树、树状数组) 阅读详情

相关推荐

高级数据结构 - 线段树、权值线段树(Java & JS & Python)

线段树、权值线段树

优快云 946

值域线段树

题目链接 题目可转化为值域线段树的写法,题目上说让求所有区间和的值在L到R之间的有多少个,每一个区间值可以由数组的前缀和快速求出来,设sum[i]为i之前的和,i小于j即求sum[j]-sum[i]在L到R之间的有多少个,可以转化为 sum[j]-R<=sum[i]<=sum[j]-L,用sum[i]建一颗值域线段树每次询问在sum[j]-R到sum[j]-L之间的值有多少个累加起来就是结果。/

ACMer_ZP的博客 1272

51单片机-点亮LED和蜂鸣器

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003是大电流驱动陈列,多用于单片机、只能仪表、PLC、数字量输出卡等控制电路中。可直接驱动蜂鸣器、继电器等负载。void delay(u16 i) // i等于1大约10uswhile(i--);//取反,高低电平不断变化,产生脉冲delay(10);// 周期200us。

三日沐水 1128

【模板】权值线段树(值域线段树)

原文 顾名思义,维护权值的线段树。在一定情况下可以代替平衡树使用。 原理是用线段树维护桶,节点维护子树中数的个数。所以空间开销与数据的值域相关。 那要是值域过大怎么办:离散化和动态开点,离散化可以将数据值域缩小到数据数量,将空间复杂度变为 O(n)O(n)O(n),缺点是需要离线。而需要在线则需支持动态开点,即用多少开多少。 动态开点线段树 权值线段树:支持平衡树操作(翻转除外),并附带离散化 P3369普通平衡树 #include<bits/stdc++.h> using namespace

cbdsopa的博客 770

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

人形机器人解耦驱动腿部设计与FAST性能优化

机器人运动控制的核心在于动力学解耦与能量效率优化。通过多连杆机构设计,可以实现关节运动的独立控制,显著降低惯性叠加和能量损耗。DecARt Leg采用创新的齿轮-四杆复合机构,将腿部伸缩与摆动运动完全解耦,配合多杆踝关节传动系统,实测行走速度可达4.18m/s。这种解耦设计不仅提升了动态性能,其提出的FAST指标更为腿部构型提供了量化评估基准,在仓储物流、地形适应等场景展现出显著优势,为人形机器人运动控制提供了新的技术路径。

weixin_33759613的博客 238

bzoj 4627 值域线段树

4627: [BeiJing2016]回转寿司 Time Limit: 10 SecMemory Limit: 256 MBSubmit: 523Solved: 227[Submit][Status][Discuss] Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿 司带给小Z的味觉感...

all00747的博客 136

Polyworks宏脚本开发入门:5分钟搞定环境搭建与基础命令录制

本文详细介绍了Polyworks宏脚本开发的入门指南,包括环境搭建、基础命令录制和核心对象操作。通过5分钟快速启动开发模式,掌握自动化操作流程和脚本调试技巧,帮助工程师高效完成工业测量与三维检测任务。

weixin_29306875的博客 536

BZOJ4627 回转寿司 值域线段树

Problem Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文 鱼寿司的满意度为10;小Z觉得金枪鱼没有什么味道,他对一盘金枪鱼寿司的满意度只有5;小Z最近看了电影“美 人鱼”,被里面的八爪鱼恶心到了,...

Rayment的博客 417

MDK5 Debug调试方法总结

MDK5 Debug调试方法总结

m0_70748084的博客 2万+

Word2vec核心模型精讲:CBOW与Skip-gram

Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优

Trisyp的博客 530

BZOJ 4627回转寿司(值域线段树)

4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 507  Solved: 217 [Submit][Status][Discuss] Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿 司带给小Z的味觉感受是不

gyr 518

不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)

文章目录6.1 常用控件6.1.1 单选按钮(RadioButton)6.1.2 复选框(CheckBox)6.1.3 框架1. 面板控件Panel2. 分组框GroupBox3. TabControl控件6.1.4 应用实例6. 2 列表框和组合框6.2.1 列表框(ListBox)6.2.2 组合框(ComboBox )6.2.3 应用实例6.3 用户交互界面6.3.1 滚动条和进度条6.3.2 定时器6.3.3 菜单设计菜单设计概述MenuStrip和ContextMenuSt

智慧空间实验室 2920

BZOJ4627 回转寿司(值域线段树)

题目: 4627: [BeiJing2016]回转寿司Time Limit: 10 Sec Memory Limit: 256 MB Submit: 534 Solved: 231 [Submit][Status][Discuss] Description酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿 司带给小Z的味觉感受是不一样

riba2534的博客 923

手机银行应用架构设计

网上银行借助互联网、移动通信网络等技术向客户提供金融服务,易受到通讯层面的安全威胁,金融机构应从通讯协议、安全认证、通信链路安全等层面,采取措施有效应对相关风险。网上银行系统服务器端提供网上银行应用服务和核心业务处理功能,金融机构应充分利用物理环境、通信网络、计算环境等领域的防护技术,在攻击者和受保护的资源间建立多道严密的安全防线。 网上银行除直接向用户提供金融服务外,也可能与外部机构开展业务合作。在网上银行系统设计、开发、部署和运营过程中,应充分考虑外部机构的系统可能存在的安全风险,并针对各类风险进行有效

银行信息系统应用架构详解 4831

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BZOJ 4627: [BeiJing2016]回转寿司【前缀和,值域线段树

就是求 区间和∈[L,R]的区间的个数 求一下前缀和,就是对于每个右端点查询左边 前缀和∈[sum[i]-R , sum[i]-L]的个数 值域线段树瞎搞搞就好 注意值可能为负 还要先插入一个0表示sum[0] = 0 【感谢良心样例 #include #define MAXN 100005 #define INF 10000000000ll using namespace std;

Flaze_的博客 893

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

初涉值域线段树

其实就是线段树啦 什么是值域线段树 我们(初学者)都知道线段树是拿来维护数列区间的信息的。但是如果我们想要查询的重点在于数值而不是区间信息呢?这时候就要对于值域区间维护线段树了。 例题 bzoj4627: [BeiJing2016]回转寿司 题目大意 给定$n$个数和$L,R$,问其中区间和满足$L<=sum[r]-sum[l-1]<=R$的区间有多少 N≤100...

weixin_30663471的博客 199

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【BZOJ】4627 [BeiJing2016]回转寿司

【BZOJ】4627 [BeiJing2016]回转寿司 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4627 首先求一个前缀和,问题转化为计数Sj−Si∈[L,R](i<j) 变形求对于每个Sj,求有多少Si∈[Sj−R,Sj−L](i<j)

Pure_W的博客 889

值域线段树and动态开线段树

值域线段树每一个节点代表一个值,其他没什么区别 动态开树就是节省了没有用到节点,其中重要一点的是不需要节点是连续的(即id值是任意的,只要可以找到即可) 例题 Bzoj4627回转寿司 题意 给n个数问区间和在L<=sum【r】-sum【l-1】<=R区间有多少个 (N≤100000,|Ai|≤100000,0≤L, R≤10^9) ...

auiayo82822的博客 198

重拾主席树

文章目录动态开点线段树BZOJ4627题解:代码:主席树可持久化书橱题解:代码:BZOJ3932题解:代码: 主席树是一种可持久化的值域线段树。这个我在之前的博客提到过。 由于空间的原因,主席树是要动态开点的。因此主席树更恰当的定义是可持久化动态开点值域线段树。 因此在重拾主席树之前,我们先看看动态开点线段树。会的可以直接跳到下面的部分。 动态开点线段树 BZOJ4627 题目描述: 酷爱日料的...

stevensonson的博客 259

Bzoj4627--BeiJing2016回转寿司

维护前缀和,枚举区间起点l,则满足条件的区间结尾r必须满足L<=pre[r]-pre[l]<=R 用值域线段树维护即可 代码 : #include<bits/stdc++.h> #define LL long long using namespace std; #define MAXN 100005 const int L=0,R=1; int ...

weixin_30302609的博客 115

C++数据结构·线段树

线段树是一种高效处理区间操作的数据结构,支持区间查询和区间更新,时间复杂度均为O(log n)。其核心是通过二叉树预处理区间信息,叶子节点存储原始数据,非叶子节点存储子区间合并结果(如区间和、最值)。与普通二叉树不同,线段树节点表示区间范围而非单一数据,适合动态区间统计问题。模板代码包含建树、懒标记下传、区间查询和更新操作,典型应用如洛谷P3372题解所示,通过线段树实现区间加减和求和功能,4倍空间预处理是关键。注意不适用于非区间类问题或频繁全量重建场景。

Gohldg的博客 3288
上一篇: 简单数位DP
下一篇: 线段树-矩形面积求并
Code--Dream
博客等级 码龄11年 53粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值