F - 回转寿司 (权值线段树)
题目链接:https://cn.vjudge.net/contest/281960#problem/F
题目大意:中文题目
具体思路:权值线段树,我们每次寻找的是满足 (i<j) L<=s[i]-s[j]<=R.转换一下,就是 s[j]-R<=s[i]<=s[j]-L。这样的话,我们每一次寻找满足情况的合数就可以了。
ps:第一次做权值线段树,感觉这东西和线段树差不多,只不过每一个区间表示成了具体的值有多少个。
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 10000000000ll
# define lson l,m,rt<<
# define rson m+,r,rt<<|
const int maxn = 8e6+;
int son[maxn][];
ll siz[maxn];
int tot,rt;
void update(int &x,ll l,ll r,ll val)
{
if(!x)// 如果这一段区间之前没有过,编号
x=++tot;
siz[x]++;
if(l==r)
return ;
ll m=(l+r)>>;
if(val<=m)
update(son[x][],l,m,val);
else if(val>m)
update(son[x][],m+,r,val);
}
ll query(int x,ll l,ll r,ll L,ll R)
{
if(!x)
return ;
if(l==L&&R==r)//查询的时候注意,如果查询到底的话,会超时
{
return siz[x];
}
ll m=(l+r)>>;
if(R<=m)
return query(son[x][],l,m,L,R);
else if(L>m)
return query(son[x][],m+,r,L,R);
else
return query(son[x][],l,m,L,m)+query(son[x][],m+,r,m+,R);
}
int main()
{
int n,l,r;
scanf("%d %d %d",&n,&l,&r);
ll tmp=,sum=,ans=;
for(int i=; i<=n; i++)
{
update(rt,-inf,inf,sum);
scanf("%lld",&tmp);
sum+=tmp;
ans+=query(rt,-inf,inf,max(-inf,sum-r),min(sum-l,inf));
// cout<<tmp<<endl;
}
printf("%lld\n",ans);
return ;
}
F - 回转寿司 (权值线段树)的更多相关文章
- bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树
4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec Memory Limit: 256 MB Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店. ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
- 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 45 Solved: 30[Submit][Status][Discuss] D ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
- BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树
BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资. ...
- BZOJ4627 前缀和 + 权值线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=4627 题意:求序列中和在L到R之间的字串种数. 要求的是和的范围,我们可以考虑先求一个前缀和pre ...
- 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)
传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...
- 洛谷P3586 [POI2015]LOG(贪心 权值线段树)
题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...
- bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
随机推荐
- Beyond Compare 4过期
试用期到期操作:找到beyond Compare 4文件夹下面的BCUnrar.dll,将其删掉或者重命名,再重新打开接着使用!
- BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树
题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...
- BZOJ2595 WC2008游览计划(斯坦纳树)
斯坦纳树板子题. 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案. 转移时首先枚举子集,有f[i][j][S]=min{f[i][j ...
- BZOJ2124 等差子序列(树状数组+哈希)
容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...
- Luogu4782 【模板】2-SAT 问题(2-SAT)
模板.注意若x=y不一定是废话,x=0或x=0表示x必须为0.以及数组开2n. #include<iostream> #include<cstdio> #include< ...
- 自学Aruba5.1.2-带宽限制
点击返回:自学Aruba之路 自学Aruba5.1.2-带宽限制 1 针对role --可以限制所有数据 注:带宽限制需要PEFNG许可证 单位可以是kbits或是mbits 可以是上传(up ...
- android 让真机显示 DeBug Log调试信息
真机默认是不开启Log 开关的,这么来说我们如果使用真机来搞程序测试的话,需要做以下几个步骤: 下面以华为手机为例开启手机的log功能: 1.在拨号界面输入:*#*#2846579#*#* 进入测 ...
- 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)
[BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...
- [luogu5008]逛庭院
首先我们看到数据范围.妈耶!数据这么大,一开始还想用个DP来做,但是看着就不行,那么根据这个数据范围,我们大致可以猜到这道题的算法是一个贪心,那么我们怎么贪呢? 我们首先还是先画一个图: 样例解释一下 ...
- suoi63 树与路径 (倍增lca)
发现对于某一个点它向上发的一条边,它被经过的次数就是这个点子树数量*不是它子树的数量 那就维护一个前缀和,然后每次拿两个端点和它们的lca的值加一加减一减,再乘上加上的值,就是这次修改后答案的增量 ( ...