CF877F题解
题目大意
有一个序列,每个位置上有 \(1\) 或 \(2\) 两种元素若干,每次询问一个区间,求这个区间有多少个子区间满足 \(1\) 类元素恰好比 \(2\) 类元素多 \(k\) 个。
莫队
要是看到很难维护的东西,又允许离线,多半就是莫队。(雾)
来看看一个区间在满足条件的情况有啥可以用到的东西:
\]
\(s1[i]\) 表示从 \(1\) 到 \(i\) 有多少个一类元素,\(s2\) 同理。
移项:
\]
转化成了这样一个问题:
\]
其中 \(val[i]\) 表示 \(s1[i] - s2[i]\)。
首先我们在莫队的过程中维护一个桶,表示目前区间中有多少个 \(val[i]\)。
在莫队的转移过程中,我们得考虑新加入的元素是在左侧还是在右侧。
如果在左侧,\(ans+=Bucket[val[i]+k]\)(因为区间的右侧要比自己大);如果在右侧,则 \(ans+=Bucket[val[i]-k]\)。
关于如何维护桶,离散化就行了。
记得离散化的数组不仅要加入 \(val[i],val[i]+k\) 和 \(val[i]-k\),还要加入 \(0,k\) 和 \(-k\)。(因为 \(val[0]=0\))
code:
#include<algorithm>
#include<cstdio>
#include<cmath>
const int M=1e5+5;
typedef long long ll;
int len;ll lsh[M*3];
int n,m,k,p,t[M],v[M],nxt[M],pre[M];ll CB[M*3];ll now,val[M],ans[M];
struct Query{
int L,R,p,id;
inline bool operator<(const Query&it)const{
return p==it.p?p&1?R<it.R:R>it.R:L<it.L;
}
}q[M];
inline void Add(const int&id,const int&to){
now+=CB[to];++CB[v[id]];
}
inline void Del(const int&id,const int&to){
--CB[v[id]];now-=CB[to];
}
signed main(){
register int i,L=1,R=0;
scanf("%d%d",&n,&k);lsh[++len]=0;lsh[++len]=k;lsh[++len]=-k;
for(i=1;i<=n;++i)scanf("%d",t+i);
for(i=1;i<=n;++i){
scanf("%lld",val+i);
if(t[i]==1)val[i]=val[i-1]+val[i];
else val[i]=val[i-1]-val[i];
lsh[++len]=val[i];lsh[++len]=val[i]-k;lsh[++len]=val[i]+k;
}
std::sort(lsh+1,lsh+len+1);len=std::unique(lsh+1,lsh+len+1)-lsh-1;
for(i=0;i<=n;++i){
v[i]=std::lower_bound(lsh+1,lsh+len+1,val[i])-lsh;
pre[i]=std::lower_bound(lsh+1,lsh+len+1,val[i]-k)-lsh;
nxt[i]=std::lower_bound(lsh+1,lsh+len+1,val[i]+k)-lsh;
}
scanf("%d",&m);p=ceil(n/sqrt(m*2.0/3));
for(i=1;i<=m;++i){
scanf("%d%d",&q[i].L,&q[i].R);--q[i].L;
q[i].id=i;q[i].p=q[i].L/p;
}
std::sort(q+1,q+m+1);
for(i=1;i<=m;++i){
const int&QL=q[i].L,&QR=q[i].R;
while(R<QR)++R,Add(R,pre[R]);
while(L>QL)--L,Add(L,nxt[L]);
while(L<QL)Del(L,nxt[L]),++L;
while(R>QR)Del(R,pre[R]),--R;
ans[q[i].id]=now;
}
for(i=1;i<=m;++i)printf("%lld\n",ans[i]);
}
CF877F题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- PHP的这些基础知识你应该熟知
PHP变量的值类型和引用类型 四种基本类型(int,float,string,boolean)以及复合类型(array)均为值类型,变量间的赋值传递的是值,相当于创建一个副本给新变量. 对象(obje ...
- docker 网络概述及网络模式详解
docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...
- Zabbix企业级开源监控解决方案
Zabbix企业级开源监控解决方案 目录 Zabbix企业级开源监控解决方案 一.Zabbix 1. 监控系统的必要性 2. 监控软件的作用 3. Zabbix的定义 4. Zabbix的监控原理 5 ...
- WEB前端开发--2(HTML基础)
HTML基础 HTML不分大小写 1.HTML概述 HTML(HyperText MarkUp Language)"超文本标记语言",他是制作网页的标准语言 1.1 标签--元素 ...
- Involuting Bunny! (2021.8)
CF1555F & Submission. Tags:「A.生成树」「B.Tricks」 分类处理询问的 trick:连接两个连通块的边显然合法,先用这些边构建生成森林.发现每条边 ...
- NeurIPS 2017 | QSGD: Communication-Efficient SGD via Gradient Quantization and Encoding
由于良好的可扩展性,随机梯度下降(SGD)的并行实现是最近研究的热点.实现并行化SGD的关键障碍就是节点间梯度更新时的高带宽开销.因此,研究者们提出了一些启发式的梯度压缩方法,使得节点间只传输压缩后的 ...
- CentOS8 固定IP无法访问外网问题解决(ping: www.hao123.com: Name or service not known)
CentOS8虚拟机用了一段时间后,需要安装telnet-server服务,却无法正常安装.之前安装ftp服务是没有问题的,安装问题如下: 错误提示,无法下载相关元数据:网上也是0.0B/s.那么可能 ...
- 如何在 Flutter 中集成华为云函数服务
介绍 云函数是一项 Serverless 计算服务,提供 FaaS(Function as a Service)能力,可以帮助开发者大幅简化应用开发与运维相关事务,降低应用功能的实现门槛,快速构建业务 ...
- Django框架路由分发-名称空间
目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...
- NSSCTF-gift_pwn
最近才开始接触"pwn"这个东西,这是近两天做的一个题目,然后就想着记一下. 好的,步入正题, 直接nc连接返回空白,然后直接退出,用kali的checksec工具或者是die检测 ...