值域线段树 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

校园网改造实录:手把手教你用华为MA5800 OLT调试全光网(附常用排错命令)

本文详细记录了校园全光网改造中华为MA5800 OLT的部署与调试过程,涵盖设备选型、基础配置、ONU批量部署及高频故障排查。通过实战案例和排错命令,帮助网络工程师快速掌握全光网调试技巧,实现低延迟、高稳定的网络性能。

weixin_42552716的博客 573

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

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

cbdsopa的博客 770

ISO7816协议深度解析-简单易懂协议详解(一)-- 复位,字符帧,及ATR

1. 摘要 IC卡必须支持T=0或T=1的协议,但不是同时支持这两种协议,而终端则必须同时支持T=0和T=1的协议。 • T=0通讯协议是异步半双工字符传输协议; • T=1通讯协议是异步半双工块传输协议; 在ISO7816-3标准中,具体规定了这两种协议:T0和T1。 IC卡所用的协议在TD1中指定,如果在复位应答信息中没有TD1,则表示用T=0的协议进行通讯。在复位应答后,IC卡和终端之间即用IC卡指定的协议进行通讯。 2. 硬件接口 1)VCC:电源输入(A类:5V, B类:3V) 2)GND:地 3

代码打工人的博客 4万+

【AUTOSAR-IpduM】-3.1-配置一个发送Tx Dynamic Container PDU(Multiple-PDU)

手把手教您如何配置一个Tx Dynamic Container PDU(Multiple-PDU),动态容器复用帧。并附上测试LOG帮助您进一步加深理解。

「汽车电子助手」的博客 1770

bzoj 4627 值域线段树

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

all00747的博客 136

redhawk:STA timing data file解析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?STA timing data file分为以下几个部分:• Header• Name Map• Footer这部分报告设计的基本信息,例如文件类型,设计名称,分隔符等。...

m0_61544122的博客 1155

BZOJ4627 回转寿司 值域线段树

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

Rayment的博客 417

ThingsBoard集群部署之k8s

今天终于有时间去搞这个啦,拖了很久了,一直没时间,因为我本地没有那么多机器资源,开虚拟机不够,如果租用阿里云服务器,需要有充值的时间,因为这个费用是按小时付费,需要有连贯的时间来搞才行,今天恰好有时间,就开始搞了,弄成功搞出来了,特地写博客记录下来。

AldrichEugene 1175

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4143

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

DSP篇--C6678功能调试系列之EDMA3调试

EDMA主要用于数据的搬运,发送、接收,其搬运数据的形式有;AB模式,ABC模式以及ping-pong模式。 EDMA3分初始化、参数配置、以及中断配置。其中中断配置则需要注意的内容主要有:挂载的TC通道,对应的触发事件,以及中断的使能。

nanke_yh的博客 1720

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

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

riba2534的博客 923

【行为决策模块项目实战】解耦控制--多控制器管理与切换的方法(附C++代码)

[请添加图片描述](https://img-blog.csdnimg.cn/c11300d9e4fe421e9070f474a468d1db.jpeg)本文先对多控制器管理与切换的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容VERTICAL_VEL, //垂直速度PID控制器VERTICAL_POS, //垂直位置PID控制器HORIZONTAL, //水平速度PID控制器YAW, //航向角yaw位置逻辑控制器。

qq_35635374的博客 1211

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

初涉值域线段树

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

weixin_30663471的博客 199

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【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、付费专栏及课程。

余额充值