值域线段树 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=*;
struct ACM
{
struct Node
{
LL val;
int lson,rson;
}seg[maxn];
int sz;
int newnode()
{
sz++;
seg[sz].val=;
seg[sz].rson=-;
seg[sz].lson=-;
return sz;
}
void init()
{
sz=-;
}
void update(int &root,LL l,LL r,LL val)
{
if(root==-) root=newnode();
seg[root].val++;
if(l==r) return ;
LL mid=(l+r)>>;
if(val<=mid) update(seg[root].lson,l,mid,val);
else update(seg[root].rson,mid+,r,val);
}
LL query(int root,LL l,LL r,LL ql,LL qr)
{
if(root==-) return ;
if(l==ql&&r==qr) return seg[root].val;
LL mid=(l+r)>>;
if(qr<=mid) return query(seg[root].lson,l,mid,ql,qr);
else if(ql>mid) return query(seg[root].rson,mid+,r,ql,qr);
else return query(seg[root].lson,l,mid,ql,mid)+query(seg[root].rson,mid+,r,mid+,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=-;
scanf("%d%d%d",&n,&L,&R);
LL sum=,ans=;
AC.init();
for(int i=; 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 ;
}
值域线段树 bzoj 4627的更多相关文章
- BZOJ 3218(a + b Problem-二分图套值域线段树)
出这题的人是怎么想出来的…… 言归正传,这题是二分图套值域线段树. 首先经过 @Vfleaking的神奇建图后,把图拆成二分图, 不妨利用有向图最小割的性质建图(以前我一直以为最小割和边的方向无关,可 ...
- [BZOJ3065]带插入区间K小值 解题报告 替罪羊树+值域线段树
刚了一天的题终于切掉了,数据结构题的代码真**难调,这是我做过的第一道树套树题,做完后感觉对树套树都有阴影了......下面写一下做题记录. Portal Gun:[BZOJ3065]带插入区间k小值 ...
- Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)
Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...
- bzoj 4627 值域线段树
4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 523 Solved: 227[Submit][Sta ...
- 树链剖分+线段树 BZOJ 1036 [ZJOI2008]树的统计Count
题目链接 题意: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节 ...
- 线段树 || BZOJ 1112: [POI2008]砖块Klo
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1112 题解: 希望有连续K柱的高度是一样的,就先把1~K的数扔进线段树(线段树的下标就是数值 ...
- 51nod1394 差和问题 值域线段树
水题..... 插入一个值$v$时,对于$[0, v - 1]$和$[v + 1, inf]$的点分别考虑就行了 删除相当于减去插入的贡献 用动态开点线段树卡点常数就过去了 复杂度$O(n \log ...
- DFS序+线段树(bzoj 4034)
题目链接 题目就不多说了. 本题目,可以用dfs序+线段树做:题目给定了一棵树,树上节点告诉了权值.我们可以先将这棵树进行dfs将一棵树变成线性结构:如图 变成这样后,然后就可以用线段树. 操作1:也 ...
- 值域线段树 (玲珑OJ 1117)
点击打开题目链接 题目意思很简单: 1.插入x 2.把小于x的数变成x 3.把大于x的数变成x 4.求集合中第x小数 5.求集合中小于x的数个数 思路: 线段树,节点是值的分数,你可以离散,也可以不离 ...
随机推荐
- ios使用http来上传图片实现方法
if (parameters) { int genderNumber = 1; self.token = loginToken; self.p ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十三:IT人理財之道-知足
身為一位專業的IT人士,工作上不僅要做到滿足興趣與專業熱忱,當然也要做到能夠滿足荷包.現代人賺錢不是問題,但花錢卻出了很大問題,親愛的IT朋友們,請不要將您辛苦賺來的錢花在想要的東西上,實際上需要的卻 ...
- 在Intellij上面导入项目 & AOP示例项目 & AspectJ学习 & Spring AoP学习
为了学习这篇文章里面下载的代码:http://www.cnblogs.com/charlesblc/p/6083687.html 需要用Intellij导入一个已有工程.源文件原始内容也可见:link ...
- PS 如何用制作键盘图标
1 键盘可以大致分为笔记本键盘和台式机键盘,颜色一般是黑色或白色.不同的键盘,拍摄角度不同(俯视或者平视)得到的效果也不一样.一般我们根据自己需要得到需要的键盘形式.比如下面别人制作的一套立体键盘,立 ...
- ubuntu14.04下CPU的caffe配置,不成功的朋友请与我(lee)联系,后面附带邮箱
因广大朋友需求cpu的caffe配置.所以我(lee)在这份博客中对cpu配置caffe做出对应操作说明.希望能够解决大家对cpu配置caffe的困惑.少走弯路. 假设有安装不成功的朋友能够和我联系, ...
- 显卡接口PCI、VGA、PCIE
转:1.PCIe扫盲系列博文连载 2.http://blog.sina.com.cn/s/blog_a73f94190102w2j2.html 1.AGP(Accelerated Graphics P ...
- 从主机给VM Copy文件
不能从主机给VM 复制文件,在VM里,setting --->option--->shareFolder-->enable-->add(要share的文件路径) then=== ...
- Mysql启动自己主动设置max_connections为其它值
背景 有同学反应.产品连不上,登陆到server.发现连接数不够了. 接着先重新启动mysql,发如今mysql启动的时候会报Waring Warning Changed limits: max_op ...
- 如何学习Java?
一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的魅力,在实际项目应用中,我们已经无法脱离javaa(Ps当然你可以选择不使用),但它的高性能 ...
- Dash 使用
花了 160 买了这个软件,至少看一遍它的 user guide,钱不能白花. https://kapeli.com/guide/guide.html 设置全局快捷键 Preference -> ...