cf 442 div2 F. Ann and Books(莫队算法)

题意:

\(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\)

每次查询区间\([l,r]内有多少对(i,j)满足l <= i <= j <= r 且 sum[j] - sum[i-1] = k\)

思路:

区间左右端点的挪动对答案的贡献符合加减性质,直接用莫队算法即可

复杂度\(O(n * sqrt(n) * log(maxsum))\) 过高

考虑先离散化预处理出所有位置 将\(log\)去掉

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 2e5 + 10;
struct Q{
int l,r,bl,id;
Q(){};
bool operator<(const Q&rhs){
if(bl == rhs.bl) return r < rhs.r;
return bl < rhs.bl;
}
}qr[N];
int n,k;
LL ans[N],value[N];
int x[N],y[N],z[N],cnt[N * 3],type[N];
vector<LL> se;
int main(){ while(cin>>n>>k){
memset(cnt, 0, sizeof(cnt));
se.clear();
for(int i = 1;i <= n;i++) scanf("%d",&type[i]);
for(int i = 1;i <= n;i++){
scanf("%d",&value[i]);
if(type[i] == 1) value[i] += value[i-1];
else value[i] = value[i-1] - value[i];
}
for(int i = 0;i <= n;i++) {
se.push_back(value[i]);
se.push_back(value[i] + k);
se.push_back(value[i] - k);
}
sort(se.begin(), se.end());
se.erase(unique(se.begin(),se.end()),se.end());
for(int i = 0;i <= n;i++){
x[i] = lower_bound(se.begin(),se.end(),value[i]) - se.begin();
y[i] = lower_bound(se.begin(),se.end(),value[i] + k) - se.begin();
z[i] = lower_bound(se.begin(),se.end(),value[i] - k) - se.begin();
}
int block_size = sqrt(n + 0.5);
int q;
cin>>q;
for(int i = 0;i < q;i++){
scanf("%d%d",&qr[i].l,&qr[i].r);
qr[i].id = i;
qr[i].l--;
qr[i].bl = qr[i].l / block_size;
}
sort(qr, qr + q);
int L = 0,R = -1;
LL res = 0;
for(int i = 0;i < q;i++){
while(qr[i].l > L) {
cnt[x[L]]--;
res -= cnt[y[L++]];
}
while(qr[i].l < L) {
res += cnt[y[--L]];
cnt[x[L]]++;
}
while(qr[i].r > R){
res += cnt[z[++R]];
cnt[x[R]]++;
}
while(qr[i].r < R) {
cnt[x[R]]--;
res -= cnt[z[R--]];
}
ans[qr[i].id] = res;
}
for(int i = 0;i < q;i++) printf("%lld\n",ans[i]);
}
return 0;
}

cf 442 div2 F. Ann and Books(莫队算法)的更多相关文章

  1. Codeforces 877F Ann and Books 莫队

    转换成前缀和, 预处理一下然后莫队. #include<bits/stdc++.h> #define LL long long #define fi first #define se se ...

  2. Codeforces #442 Div2 F

    #442 Div2 F 题意 给出一些包含两种类型(a, b)问题的问题册,每本问题册有一些题目,每次查询某一区间,问有多少子区间中 a 问题的数量等于 b 问题的数量加 \(k\) . 分析 令包含 ...

  3. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  4. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

  5. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  6. BZOJ-2038 小Z的袜子(hose) 莫队算法

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5573 Solved: 2568 [Subm ...

  7. 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...

  8. bzoj 3809 Gty的二逼妹子序列(莫队算法,块状链表)

    [题意] 回答若干个询问,(l,r,a,b):区间[l,r]内权值在[a,b]的数有多少[种]. [思路] 考虑使用块状链表实现莫队算法中的插入与删除. 因为权值处于1..n之间,所以我们可以建一个基 ...

  9. bzoj 3289 Mato的文件管理(莫队算法+BIT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3289 [题意] 回答若干个询问:[l,r]区间内的逆序对个数. [思路] 莫队算法,B ...

随机推荐

  1. Kubernetes网络方案的三大类别和六个场景

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文章根据网易云资深解决方案架构师 王必成在云原生用户大会上的分享整理. 今天我将分享个人对于网络方案的理解,以及网易云在交付 Kubernetes ...

  2. Kubernetes 在网易云中的落地优化实践

    本文来自网易云社区 今天我跟大家讲的是 Kubernetes 在网易的一些实践,目的是抛砖引玉,看看大家在这个方向有没有更好的实践方法.简单介绍一下网易云.网易云是从最早 Kubernetes 1.0 ...

  3. RAP2环境搭建整理(超详细)

    RAP2是阿里开源的接口管理平台,最近搭建了一下,将部署文档整理如下: 如果途中遇坑会在文章末尾记录下来嘻嘻 首先,确定环境是否部署好. RAP2所需的环境为: node.js 8.9.4+ mysq ...

  4. Python中assert的作用?

    1. assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常. 什么情况下我们会需要这样的代码呢 ...

  5. BehaviorDesigner学习

    行为树: 行为树设计师插件是一个专门为unity设计的AI插件. 学习用!!!插件地址:链接:http://pan.baidu.com/s/1dF2okPN 密码:b43m 通过继承Behavior中 ...

  6. hibernate.hbm2ddl.auto=update不能自动生成表结构

    在写上篇文章<spring整合springmvc和hibernate>的时候,曾遇到一个问题 INFO: Server startup in 8102 ms Hibernate: inse ...

  7. CF245H Queries for Number of Palindromes

    题目描述 给你一个字符串s由小写字母组成,有q组询问,每组询问给你两个数,l和r,问在字符串区间l到r的字串中,包含多少回文串. 时空限制 5000ms,256MB 输入格式 第1行,给出s,s的长度 ...

  8. python内建模块Collections

    # -*- coding:utf-8 -*- # OrderedDict可以实现一个FIFO(先进先出)的dict, # 当容量超出限制时,先删除最早添加的Key: from collections ...

  9. 水仙花数---基于python

    # coding:utf-8"""水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153) ...

  10. codeforces 301D Yaroslav and Divisors(树状数组)

    Yaroslav has an array p = p1, p2, ..., pn (1 ≤ pi ≤ n), consisting of n distinct integers. Also, he ...