回转寿司

Description

酷爱日料的小Z经常光顾学校东门外的回转寿司店。在这里,一盘盘寿司通过传送带依次呈现在小Z眼前。不同的寿
司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文
鱼寿司的满意度为10;小Z觉得金枪鱼没有什么味道,他对一盘金枪鱼寿司的满意度只有5;小Z最近看了电影“美
人鱼”,被里面的八爪鱼恶心到了,所以他对一盘八爪鱼刺身的满意度是-100。特别地,小Z是个著名的吃货,他
吃回转寿司有一个习惯,我们称之为“狂吃不止”。具体地讲,当他吃掉传送带上的一盘寿司后,他会毫不犹豫地
吃掉它后面的寿司,直到他不想再吃寿司了为止。今天,小Z再次来到了这家回转寿司店,N盘寿司将依次经过他的
面前,其中,小Z对第i盘寿司的满意度为Ai。小Z可以选择从哪盘寿司开始吃,也可以选择吃到哪盘寿司为止,他
想知道共有多少种不同的选择,使得他的满意度之和不低于L,且不高于R。注意,虽然这是回转寿司,但是我们不
认为这是一个环上的问题,而是一条线上的问题。即,小Z能吃到的是输入序列的一个连续子序列;最后一盘转走 之后,第一盘并不会再出现一次。

Input

第一行包含三个整数N,L和R,分别表示寿司盘数,满意度的下限和上限。 第二行包含N个整数Ai,表示小Z对寿司的满意度。
N≤100000,|Ai|≤100000,0≤L, R≤10^9 Output

仅一行,包含一个整数,表示共有多少种选择可以使得小Z的满意度之和 不低于L且不高于R。 Sample Input

5 5 9
1 2 3 4 5Sample Output6

铺垫知识

值域线段树

  • 定义:值域线段是是用来 统计插入到[ l , r] 区域内的元素的个数,值域线段树每一个节点代表一个值,其他与普通线段树没什么区别。

动态开点

  • 作用:在一颗线段树中,我们在不断插入点\访问区间的时候,我们可能不会在所有的区间插入数值、可能不会访问到所有的区间,那么我们就没必要给线段一下子开满空间,我们只需要在访问某个区间的时候把这个区间建立出来就行了,这样就节省了空间。
  • 使用情况: 根据它节省空间的作用,我们就可看出它明显使用在 直接建立线段树空间不够的情况。
  • 附上动态开点过程图:


红框中是我们将要访问到那个子节点就动态建立那个子节点区间,而其他部分则是不存在的

  • 动态开点核心代码:
 ll tree[Len], lson[Len],rson[Len];int tot = 0;         //当前总共的节点的个数
ll root = 1;           //初始节点从1开始
int newnode()
{++ tot;tree[tot] = lson[tot] = rson[tot] = 0;return tot;
}

本题思路

  • 题意:这一是让起有多少个子区间的和是在所给限制范围【L, R】直接。
  • 思路:那么我们可以可以用前缀和来维护连续区间和,但是直接求的话一定会T,首先我们可以列出这个不等式:L <= sum[r] - sum[l - 1] <= R,l < r, 我们可以对这个不等式进行变化为sum[r] - R <= sum[l - 1] <= sum[r] - L, 这样我们就可以不断的查询[ sum[ r ] - R, sum[ r ] - L ],这个区间内符合题意的 sum[ l - 1]的数量就行了,最后有一点要注意到,由于 l < r 但我们查询 sum[r] - R <= sum[l - 1] <= sum[r] - L这个区间的时候我们已经把 位于 r 之前的所有可能的sum[ l ] 已经更新过了,这样就保证了我们要查询那个区间,那个区间内的所有树都确保已经被更新过了。
  • 最中后 请注意一下:我们要更新的 sum[l - 1] 中的 l - 1 的范围,因为是由于 sum维护的是前缀和,所以 r 的范围是[1, n],又因为 l < r, 所以 l - 1 的范围是 [0, n - 1] , 所以我们更新的范围是 sum[0]、sum[1]、sum[2].....sum[n - 1]

题解

#include<iostream>
#include<cstdio>
using namespace std;#define INF 1e10
#define ll long long
const int maxn = 100005;
const int Len = 1e7 + 5;
ll sum[maxn];
ll tree[Len], lson[Len],rson[Len];  //注意左右儿子数组存储的是 子区间的tree数组下标 int tot = 0;
ll root = 1;
int newnode()
{++ tot;tree[tot] = lson[tot] = rson[tot] = 0;return tot;
}void Update(ll & rt, ll l, ll r, ll val)   //请千万⚠️ 这一行里面的引用!!!
{if(! rt)rt = newnode();tree[rt] ++;if(l == r) return;ll m = (l + r) >> 1;if(val <= m) Update(lson[rt], l, m, val);else Update(rson[rt], m+1, r, val);
}ll Query(ll rt, ll l, ll r, ll s, ll e)
{if(s <= l && r <= e)return tree[rt];ll m = (l + r) >> 1;ll res = 0;if(s <= m) res += Query(lson[rt], l, m, s, e);if(e >  m) res += Query(rson[rt], m+1,r, s, e);return res;
}int main()
{//freopen("A.txt","r",stdin);int n, l, r;scanf("%d %d %d", &n, &l, &r);for(int i = 1; i <= n; i ++)scanf("%lld", &sum[i]), sum[i] += sum[i - 1];ll ans = 0;Update(root, -INF, INF, 0);for(int i = 1; i <= n; ji ++){ans += Query(root, -INF, INF, sum[i] - r, sum[i] - l);        Update(root, -INF, INF, sum[i]);}printf("%lld\n", ans);return 0;
}

K - 回转寿司(值域段数(板题) + 动态开点)相关推荐

  1. BZOJ4627 回转寿司 值域线段树

    Problem Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都 ...

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

    4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 507  Solved: 217 [Submit][S ...

  3. BZOJ 4627: [BeiJing2016]回转寿司 cdq

    4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 624  Solved: 273 [Submit][S ...

  4. <笔试> 回转寿司题解 动态规划

    回转寿司 链接:回转寿司_美团笔试题_牛客网 小美请小团吃回转寿司.转盘上有N盘寿司围成一圈,第1盘与第2盘相邻,第2盘与第3盘相邻,-,第N-1盘与第N盘相邻,第N盘与第1盘相邻.小团认为第i盘寿司 ...

  5. 如何用python计算函数的值域_(完整版)求函数定义域及值域方法及典型题归纳

    范文 . 范例 . 指导 . 参考 < 一 > 求函数定义域.值域方法和典型题归纳 一.基础知识整合 1. 函数的定义:设集合 A 和 B 是非空数集,按照某一确定的对应关系 f , 使得 ...

  6. bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树

    4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MB Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店. ...

  7. bzoj 4627 回转寿司(权值线段树)

    回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个 ...

  8. Bzoj4627 [BeiJing2016]回转寿司

    Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 329  Solved: 149 [Submit][Status][Discuss] Descript ...

  9. bzoj4627[BeiJing2016]回转寿司

    bzoj4627[BeiJing2016]回转寿司 题意: 求在一个序列中和在区间[l,r]中的连续子序列的个数.序列大小≤100000,序列元素可以为负数. 题解: 题目要求这个:l<=sum ...

最新文章

  1. 在后SCI时代需要什么样的人才?
  2. 黑客发飙!智能汽车不太安全你还敢开?
  3. SpringMVC、Spring和Struts的区别
  4. 【控制】《多无人机协同控制技术》周伟老师-第2章-多无人机协同控制体系结构
  5. 基于MATLAB的RSSI 和 PLE 定位算法,并通过卡尔曼滤波器减少非视距误差
  6. Android的配置界面PreferenceActivity
  7. Mysql在可视化工具navicat中如何解决输入小数变整数的问题,(改变小数位数)
  8. 路飞学城Python-Day78
  9. C++中的函数原型和函数定义
  10. 2016年中南大学校赛镜像赛(校外队伍)
  11. 树莓派3B+安装JupyterLab
  12. 写给Python程序员的PHP快速入门教程
  13. 关于系统架构你不知道的那些事-架构设计流程:设计备选方案
  14. Guitar Pro8电脑版更新下载及主要功能介绍
  15. Windows下Python的安装
  16. 【Python】如何利用python对c程序源码进行协助解读(学会事半功倍)
  17. 小鸟云安全组在哪里?怎么设置?
  18. PCB上电源走线注意
  19. Cakephp分组查询
  20. Vue组件库实现按需加载功能

热门文章

  1. Docker技术( 容器虚拟化技术 )
  2. HTMLCSS学习笔记 纯知识点版 (尚硅谷2019李立超版)
  3. 为电脑右键菜单添加记事本打开
  4. 离散数学-一阶逻辑等值式与置换规则
  5. 【洛谷】P1198 最大数
  6. 三星android p rom包,LineageOS 16正式推出:安卓9 Pie刷机包来了,小米/三星/一加都有...
  7. Excel应用技巧3 超级表格
  8. 12V转5V稳压电路详细分析(7805三端稳压,LM2596稳压)
  9. [AS3]as3用Loader来加载jpg,gif,png图片的源代码实例
  10. 使用word批量将.docx(或者.doc)转成.pdf