HDU - 6534 Chika and Friendly Pairs(树状数组+莫队)
时间:2021-07-21
本文章向大家介绍HDU - 6534 Chika and Friendly Pairs(树状数组+莫队),主要包括HDU - 6534 Chika and Friendly Pairs(树状数组+莫队)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目大意
询问区间[l,r]中满足相邻两个树大小不超过k的数对。
解题思路
如果一个一个加入数字的话,设当前数字为i,那么对答案的贡献就是之前的数字之中\([a_i-k,a_i+k]\)范围内的数字的数量,可以用莫队来维护l,r,然后每次的修改和查询操作用树状数组来操作。
代码
const int maxn = 1e5+10;
const int maxm = 1e6+10;
int n, nn, m, k;
int a[maxn], b[maxn], p[maxn];
int find(int x) {
return lower_bound(b+1, b+nn+1, x)-b;
}
int find2(int x) {
return upper_bound(b+1, b+nn+1, x)-b;
}
int c[maxn];
void insert(int x, int y) {
while(x<=n) {
c[x] += y;
x += x&-x;
}
}
int ask(int x) {
int sum = 0;
while(x) {
sum += c[x];
x -= x&-x;
}
return sum;
}
struct Q {
int l, r, i;
} q[maxn];
int l = 1, r = 0;
int ans[maxn], res, up[maxn], low[maxn];
void add(int x) {
res += ask(up[x])-ask(low[x]-1);
insert(a[x], 1);
}
void sub(int x) {
insert(a[x], -1);
res -= ask(up[x])-ask(low[x]-1);
//cout << a[x] << ' ' << l << ' ' << r << ' ' << res << endl;
}
int main() {
IOS;
cin >> n >> m >> k;
for (int i = 1; i<=n; ++i) cin >> a[i], b[i] = a[i];
sort(b+1, b+n+1);
nn = unique(b+1, b+n+1)-b-1;
for (int i = 1; i<=n; ++i) {
low[i] = find(a[i]-k);
up[i] = find2(a[i]+k)-1;
a[i] = find(a[i]);
//cout << low[i] << ' ' << a[i] << ' ' << up[i] << endl;
}
for (int i = 1; i<=m; ++i) {
cin >> q[i].l >> q[i].r;
q[i].i = i;
}
int sz = sqrt(m)+1;
sort(q+1, q+m+1, [=](Q x, Q y) {return (x.l/sz^y.l/sz) ? x.l/sz<y.l/sz : ((x.l/sz)%2 ? x.r<y.r:x.r>y.r);});
for (int i = 1; i<=m; ++i) {
//cout << q[i].l << ' ' << q[i].r << endl;
while(q[i].r > r) add(++r);
//cout << res << endl;
while(q[i].l > l) sub(l++);
//cout << res << endl;
while(q[i].r < r) sub(r--);
//cout << res << endl;
while(q[i].l < l) add(--l);
//cout << res << endl;
ans[q[i].i] = res;
}
for (int i = 1; i<=m; ++i) cout << ans[i] << endl;
return 0;
}
原文地址:https://www.cnblogs.com/shuitiangong/p/15041451.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速学习-Apollo从入门到精通
- dotnet 使用 SourceLink 将 NuGet 链接源代码到 GitHub 等仓库
- 嵌入式linux之go语言开发(八)存储模块的封装(一)
- QGIS制图中面积小的区域不显示注记
- linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
- 满眼只有React和Vue,却对前端数据层几乎一无所知
- 嵌入式linux之go语言开发(八)存储模块的封装(二)
- 招商银行校招题二
- 小程序工程化系列(一):文件依赖分析
- ucgui在windows上的移植,及为go语言打造简易跨平台GUI的想法
- React setState 是异步执行还是同步执行?
- sm2,sm3,sm4国密算法的纯c语言版本,使用于任何嵌入式平台
- sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)
- 面试:mysql 事务和锁的解释
- 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)