题目链接:传送门





AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>using namespace std;
typedef long long ll;
const int N = 500010, M = 5000007, INF = 0x3f3f3f3f;
int read()
{int x = 0, f = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}int n, m;
int block, k;
int w[N];
ll ans[N];struct Query
{int id, l, r;ll res;
}q[N];struct Range
{int id, l, r, t;//t表示的是类型+/-
};vector<Range>range[N];
int f[N], g[N];//得到x的二进制下有多少个1
inline int get_count(int x)
{int res = 0;while(x)res += x & 1, x >>= 1;return res;
}inline int get_block(int x)
{return x / block;
}bool cmp(const Query& a, const Query& b)
{int x = get_block(a.l);int y = get_block(b.l);if(x != y)return x < y;return a.r < b.r;
}int main()
{n = read(), m = read(), k = read();for(int i = 1; i <= n; ++ i)w[i] = read();vector<int> nums;//预处理出给定范围内所有二进制数为k的数for(int i = 0; i < (1 << 14); ++ i){if(get_count(i) == k)nums.push_back(i);}for(int i = 1; i <= n; ++ i){//g[i]是一个桶表示前i个数中有多少个数与x配对for(auto it : nums) ++ g[w[i] ^ it];//f[i]表示w1 ~ wi中有多少个数与wi+1配对f[i] = g[w[i + 1]];}for(int i = 0; i < m; ++ i){int l = read(), r = read();q[i] = {i, l, r};}block = sqrt(n);sort(q, q + m, cmp);for(int i = 0, L = 1, R = 0; i < m; ++ i){int l = q[i].l, r = q[i].r, id = q[i].id;if(R < r) range[L - 1].push_back({i, R + 1, r, -1});while(R < r) q[i].res += f[R ++ ];if(R > r) range[L - 1].push_back({i, r + 1, R, 1});while(R > r) q[i].res -= f[ -- R];//S(R) = f(R - 1)if(L < l) range[R].push_back({i, L, l - 1, -1});while(L < l) q[i].res += f[L - 1] + (k == 0), L ++ ;if(L > l) range[R].push_back({i, l, L - 1, 1});while(L > l) q[i].res -= f[L - 2] + (k == 0), L -- ;}memset(g, 0, sizeof g);for(int i = 1; i <= n; ++ i){for(auto it : nums) ++ g[w[i] ^it];for(auto it : range[i]){int id = it.id, l = it.l, r = it.r, t = it.t;for(int x = l; x <= r; ++ x)q[id].res += g[w[x]] * t;}}for(int i = 1; i < m; ++ i) q[i].res += q[i - 1].res;for(int i = 0; i < m; ++ i) ans[q[i].id] = q[i].res;for(int i = 0; i < m; ++ i) printf("%lld\n", ans[i]);return 0;
}

P4887 【模板】莫队二次离线(第十四分块(前体))相关推荐

  1. P4887 第十四分块(前体) 莫队

    题意: 给你一个序列,每次询问l,r问多少个a[i]^a[j]有k个1,k固定. 序列长度1e5,a[i]<=2^14 时限1s,空间40M 题解: 个人其实开始没什么思路,看了题解也好久,题解 ...

  2. SPOJ - DQUERY D-query(莫队/线段树+离线/主席树)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,再给出m次查询,每次查询区间[l,r]中有多少个不同的数 题目分析:莫队模板题,直接套板子就好了 有点意思的是函数返回值为布尔类型,然后没有r ...

  3. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1539  Solved: 665 [Submit][Status][ ...

  4. 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统

    第十一章 网络配置管理 网络地址获取方式: 1)DHCP自动获取 2)手动配置 1.网卡配置文件: /etc/sysconfig/network-scripts/ [root@server0 Desk ...

  5. PDMS二次开发(十四)——自动插入焊口和计算焊接当量(达因数)

    目录 1.概述 2.使用方法 3.测试说明 以100-B-1/B1管线为例 (1)执行基本动作 (2)ISO图显示效果 (3)焊口类型 (4)显示运行报告 (5)焊口库信息错误提示 4.补充说明 4. ...

  6. 莫队 从零基础到入门 超详细

    莫队是由莫涛大神提出,一种解决区间问题的骗分神器.一般来说询问是离线的.基础的莫队结构简单,复杂度优秀,理解之后会发现,没有想象中的那么高大上难. 前置芝士 分块的思想 一些 S T L STL ST ...

  7. [HNOI2016] 序列(线段树 + 莫队 + 倍增)

    problem luogu-P3246 心路历程+卡常历程+问题存疑 一直在想莫队的做法.发现左右指针的移动对应一段左/右端点固定的子序列,然后可以一个数代表一段相同的贡献. 就开始求 lsti,nx ...

  8. hdu 5213(容斥原理+莫队算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5213 莫队算法是离线处理一类区间不修改查询类问题的算法.就是如果你知道了[L,R]的答案.你可以在O( ...

  9. 清橙A1206 小Z的袜子(莫队算法)

    A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:744   AC次数:210   平均分:44.44 将本题分享到:        查看未格式化的试题    ...

最新文章

  1. ??征集Sql Server2005设置Windows集成认证资料
  2. c++基础——程序流程结构之选择结构
  3. tkinter回调异常_处理python tkinter中的异常
  4. boost::geometry::convert用法的测试程序
  5. java编程思想 学习笔记(2)
  6. YII2操作mongodb笔记(转)
  7. 分类计数原理与分步计数原理_两种基础的计数原理
  8. itext 生成pdf 输出特殊符号_JAVA提取PDF内容及转换PDF为图片
  9. 原生PHP 做网站,php原生方法监控服务网站的运行情况
  10. 卡巴斯基2013简体中文正式版
  11. 6. 机器人正运动学---齐次变换矩阵的三种解读
  12. 百度地图android兼容,支持离线地图 百度地图Android版上线
  13. Failed to initialize Data Warehouse host process
  14. Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
  15. 半双工通信java_Socket实现一个简单的半双工通信
  16. 编程心得之逻辑判断的先后顺序
  17. python写手机脚本脱离电脑_在手机里编写python脚本控制手机
  18. Python爬虫入门教程 65-100 爬虫与反爬虫的修罗场,点评网站,字体反爬之三
  19. ubuntu18.04下YOLOV4测试和训练自己的数据集
  20. B , BX, BL, BXL

热门文章

  1. 刷脸背后,卷积神经网络的数学原理原来是这样的
  2. Primary VLAN
  3. Laravel 中简约而不简单的 Macroable 宏指令
  4. ecshop入门第一步,替换ecshop模板的显示图片
  5. PHPWAMP集成环境Zend组件的相关介绍,环境默认的PHP运行模式
  6. 利用adb命令查看apk文件包名的一些方法
  7. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
  8. 微信开发文档笔记整理(一)
  9. cdh4.6.0升级测试1
  10. 产生一定范围随机数的通用算法公式