HDU 6534 莫队+ 树状数组
题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491
代码:
#include <bits/stdc++.h>
#define lowbit(x) (x & (-x))
using namespace std;
const int maxn = 30010;
int c[maxn * 3], num[maxn], b[maxn * 3], lb[maxn], rb[maxn], a[maxn];
int ans[maxn], tot;
struct Query {
int l, r, id;
bool operator < (const Query& rhs) const {
if(num[l] == num[rhs.l]) return r < rhs.r;
return num[l] < num[rhs.l];
}
};
Query q[maxn];
void add(int x, int y) {
for (; x <= tot; x += lowbit(x)) {
c[x] += y;
}
}
int query(int x) {
int ans = 0;
for (; x; x -= lowbit(x)) {
ans += c[x];
}
return ans;
}
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
b[++tot] = a[i], b[++tot] = a[i] + k, b[++tot] = a[i] - k - 1;
}
sort(b + 1, b + 1 + tot);
tot = unique(b + 1, b + 1 + tot) - (b + 1);
for (int i = 1; i <= n; i++) {
lb[i] = lower_bound(b + 1, b + 1 + tot, a[i] - k - 1) - b;
rb[i] = lower_bound(b + 1, b + 1 + tot, a[i] + k) - b;
a[i] = lower_bound(b + 1, b + 1 + tot, a[i]) - b;
}
for (int i = 1; i <= m; i++) {
scanf("%d%d", &q[i].l, &q[i].r);
q[i].id = i;
}
int len = sqrt(n);
for (int i = 1; i <= n; i++) {
num[i] = (i - 1) / len + 1;
}
sort(q + 1, q + 1 + m);
int l = q[1].l, r = q[1].l - 1, sum = 0;
for (int i = 1; i <= m; i++) {
while(r < q[i].r) {
r++;
sum += query(rb[r]) - query(lb[r]);
add(a[r], 1);
}
while(l > q[i].l) {
l--;
sum += query(rb[l]) - query(lb[l]);
add(a[l], 1);
}
while(r > q[i].r) {
add(a[r], -1);
sum -= query(rb[r]) - query(lb[r]);
r--;
}
while(l < q[i].l) {
add(a[l], -1);
sum -= query(rb[l]) - query(lb[l]);
l++;
}
ans[q[i].id] = sum;
}
for (int i = 1; i <= m; i++)
printf("%d\n", ans[i]);
}
HDU 6534 莫队+ 树状数组的更多相关文章
- bzoj3236 作业 莫队+树状数组
莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...
- BZOJ_3289_Mato的文件管理_莫队+树状数组
BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...
- BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块
题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...
- COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)
题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- 51nod 1290 Counting Diff Pairs | 莫队 树状数组
51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...
- 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)
点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...
- HihoCoder 1488 : 排队接水(莫队+树状数组)
描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...
- BZOJ 3236 莫队+树状数组
思路: 莫队+树状数组 (据说此题卡常数) yzy写了一天(偷笑) 复杂度有点儿爆炸 O(msqrt(n)logn) //By SiriusRen #include <cmath> #in ...
随机推荐
- Dagger2 探索记3——两大进阶组件(一)
今天要讲的时@Scope这个组件.为什么说它是进阶组件,就是因为它基本上没作用,但在理解了基本组件之后又必须用到. Scope的意思是作用域,一般用来标记@Provide方法,将生成的对象单例化.但@ ...
- getopts的错误报告模式
- 一、Gulp
开发和部署前端项目: 在开发Web应用中为加速客户端资源响应(js和css),减少对js和css的请求,通过bundles来实现. 在ASP.NET5中放弃该特性,被其他类似的组件所代替.比如使用Gu ...
- expdp和impdp
前言 一句话 expdp和impdp,只能在本地服务器运行 使用前 1.创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. create directory dpd ...
- Dubbo底层原理
dubbo 1. 依赖 spring扫描注入 2. 反射 3. 动态代理 4.Zookeeper 5.netty 服务不在本地,具体实现在远程 可以用Dubbo 基于XML 效率低 传输低 解析低 ...
- DMA实验总结
一.RCC设置 没什么好写的之前USART的基本一样 /************************************************************************ ...
- mysql5.6配置-my
# mkdir -p /home/mysql/3306/{data,binlog,logs} [client] port = socket=/tmp/my3306.sock [mysql] no-au ...
- leetcode上的一些栈、队列问题
20-有效的括号 思路:主要考察栈的一些基本操作,像push()(将数据压入栈顶).top()(取栈顶的数据但不删除).pop()(直接删除栈顶的元素).empty()(判断栈是否为空).这题就是先把 ...
- CentOS 7.0 lamp
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...
- MySQL 计算中位数
mysql中位数 奇数取中间的值,偶数取中间两个数的平均值 eg: 12345 中位数4 1234 中位数2.5 SELECT avg(t1.money) as median_val FROM ( S ...