HDU6534 Chika and Friendly Pairs(莫队,树状数组)
HDU6534 Chika and Friendly Pairs
莫队,树状数组的简单题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 30005;
const int maxq = 27005;
int n, m, k, num, sz, len;
int a[maxn], belong[maxn], t[maxn], tree[maxn], ans[maxq];
int lowerl[maxn], lowerr[maxn], lower[maxn];
struct Q{
int l ,r, id;
}query[maxq];
int cmp(Q a, Q b){
return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.l] & 1) ? a.r < b.r : a.r > b.r);
}
void init()
{
for(int i = 1; i <= n; i++) t[i] = a[i];
sort(t + 1, t + n + 1);
len = unique(t + 1, t + n + 1) - (t + 1);
for(int i = 0; i <= len; i++) tree[i] = 0;
}
int _hash(int x)
{
return lower_bound(t + 1, t + len + 1, x) - t;
}
inline int lowbit(int x){return x & (-x);}
void update(int pos, int x)
{
if(pos < 1) return;
while(pos <= len + 1){
tree[pos] += x;
pos += lowbit(pos);
}
}
int query_ans(int pos)
{
int ret = 0;
while(pos >= 1){
ret += tree[pos];
pos -= lowbit(pos);
}
return ret;
}
int main()
{
while(~scanf("%d%d%d", &n, &m, &k)){
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
sz = sqrt(n);
num = ceil((double)n / sz);
for(int i = 1; i <= num; i++){
for(int j = (i - 1) * sz + 1; j <= i * sz && j <= n; j++){
belong[j] = i;
}
}
for(int i = 1; i <= m; i++){
scanf("%d%d", &query[i].l, &query[i].r);
query[i].id = i;
}
init();
sort(query + 1, query + m + 1, cmp);
int l = 1, r = 0;
int now = 0;
for(int i = 1; i <= n; i++){
lowerl[i] = _hash(a[i] - k);
lowerr[i] = _hash(a[i] + k);
lower[i] = _hash(a[i]);
}
for(int i = 1; i <= m; i++){
int ql = query[i].l, qr = query[i].r;
while(l < ql){
int lid = lowerl[l], rid = lowerr[l], id = lower[l];
lid--;
if(t[rid] > a[l] + k) rid--;
update(id, -1);
now -= (query_ans(rid) - query_ans(lid));
l++;
}
while(l > ql){
l--;
int lid = lowerl[l], rid = lowerr[l], id = lower[l];
lid--;
if(t[rid] > a[l] + k) rid--;
now += (query_ans(rid) - query_ans(lid));
update(id, 1);
}
while(r < qr){
r++;
int lid = lowerl[r], rid = lowerr[r], id = lower[r];
lid--;
if(t[rid] > a[r] + k) rid--;
now += (query_ans(rid) - query_ans(lid));
update(id, 1);
}
while(r > qr){
int lid = lowerl[r], rid = lowerr[r], id = lower[r];
lid--;
if(t[rid] > a[r] + k) rid--;
update(id, -1);
now -= (query_ans(rid) - query_ans(lid));
r--;
}
ans[query[i].id] = now;
}
for(int i = 1; i <= m; i++){
printf("%d\n", ans[i]);
}
}
return 0;
}
HDU6534 Chika and Friendly Pairs(莫队,树状数组)的更多相关文章
- 51nod 1290 Counting Diff Pairs | 莫队 树状数组
51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...
- 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同学 ...
- 【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 ...
- BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)
传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...
随机推荐
- 一种在获取互斥锁陷入阻塞时可以被中断的 lock
经过上篇的实例 线程在陷入阻塞时,在sychronized获取互斥锁陷入阻塞时,我们是无法进行中断的,javase5中提供了一种解决的办法 ReentrantLock ,我们常常用到的是它的lock( ...
- Linux中如何添加/删除FTP用户并设置权限
在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被设置用户名为test.被限制路径为/home/test 2.创建建用户:在root用户下: user ...
- Echarts多个图表响应式以及其他问题
1.限制柱状图的宽度(自适应的柱子很大) barMaxWidth:30//设置柱状最大的宽度 2.设置y轴的label标签显示(单位 元 转 万) axisLabel: { formatte ...
- k8s+docker+proget 镜像制作
安装proget 1 首先在k8s上运行proget的数据库配置有个注意点:要根据proget官网要求的sql server排序方式建数据库,不然数据保存的时候会报错 2 proget运行起来后,默认 ...
- 2019-11-29-C#-标准性能测试高级用法
title author date CreateTime categories C# 标准性能测试高级用法 lindexi 2019-11-29 10:13:16 +0800 2018-07-08 0 ...
- Inno setup 开源的安装包打包软件
Inno Setup是一个开源的安装包打包软件,下载地址是:http://www.jrsoftware.org/isdl.php 使用引导界面创建一个安装包打包 配置参考官方文档:http://www ...
- Big Data(二)分布式文件系统那么多,为什么hadoop还需要一个hdfs文件系统?
提纲 - 存储模型- 架构设计- 角色功能- 元数据持久化- 安全模式- 副本放置策略- 读写流程- 安全策略 存储模型 - 文件线性按字节切割成块(block),具有offset,id - 文件与文 ...
- TCP那些事儿
TCP 的那些事儿(上) TCP 的那些事儿(下)
- No application found. Either work inside a view function or push an application context.
flask报了这个错,字面意思是说没有应用上下文,字面给的解决意见是要么放置在一个视图内,要么提供一个应用(flask)上下文. 查看文档发现文档给了个解决方案: 一个是通过app.app_conte ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(4)|借用Borrowing]
[易学易懂系列|rustlang语言|零基础|快速入门|(4)] Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rust ...