题目链接


题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k.

首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t。

这里用到了莫对算法分块来降低复杂度,莫队算法的核心思想是对所有查询进行合理的排序,并将本次查询的结果不断进行修改以得到下次查询的结果

AC代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]={0,1,0,-1,1,0,-1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=3e4+5;
int lt[maxn],mt[maxn],rt[maxn];
int a[maxn],b[maxn],c[maxn],be[maxn],len;
int n,m,k,ans,u;
int res[maxn];
struct node
{int l,r,id;
}s[maxn];
bool cmp(node s,node e)
{if(be[s.l]==be[e.l]) return s.r<e.r;return s.l<e.l;
}
void update(int x,int val)
{while(x<=len){c[x]+=val;x+=lowbit(x);}
}
int getsum(int x)
{int p=0;while(x>0){p+=c[x];x-=lowbit(x);}return p;
}
void add(int x)
{ans+=(getsum(rt[x])-getsum(lt[x]));update(mt[x],1);
}
void del(int x)
{update(mt[x],-1);ans-=(getsum(rt[x])-getsum(lt[x]));
}
int main()
{int l,r;memset(c,0,sizeof(c));scanf("%d %d %d",&n,&m,&k);u=sqrt(n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=a[i];be[i]=i/u+1;//分块}sort(b+1,b+1+n);len=unique(b+1,b+1+n)-b-1;for(int i=1;i<=n;i++){lt[i]=lower_bound(b+1,b+1+len,a[i]-k)-b-1;//a[i]-k对应离散后的下标-1rt[i]=upper_bound(b+1,b+1+len,a[i]+k)-b-1;//a[i]+k对应离散后的下标mt[i]=lower_bound(b+1,b+1+len,a[i])-b;//a[i]对应的下标}for(int i=1;i<=m;i++){scanf("%d %d",&l,&r);s[i].l=l,s[i].r=r,s[i].id=i;}sort(s+1,s+1+m,cmp);//分块排序降低复杂度l=1,r=0,ans=0;for(int i=1;i<=m;i++)//开始对每一个区间进行处理,移动左右端点{while(l<s[i].l) del(l++);while(l>s[i].l) add(--l);while(r>s[i].r) del(r--);while(r<s[i].r) add(++r);res[s[i].id]=ans;}for(int i=1;i<=m;i++)printf("%d\n",res[i]);return 0;
}

莫队算法思想:https://blog.csdn.net/ThinFatty/article/details/72581276

Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组相关推荐

  1. Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组

    题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...

  2. HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...

  3. HDU - 5381 The sum of gcd(莫队/线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...

  4. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)

    题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...

  5. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)

    Super Mario 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...

  6. Chika and Friendly Pairs(莫队+树状数组+离散化+预处理上下界)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6534 Chika and Friendly Pairs Time Limit: 2000/1000 M ...

  7. 2019CCPC湖南全国邀请赛-Chika and Friendly Pairs- 莫队+树状数组+离散化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6534 思路: 莫队算法,树状数组求和.每个数对应的离散化之后的值需要打表存下来. Code: 1 # ...

  8. HDU ACM 4031 Attack (树状数组--单点查询+区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 用了树状数组的区间更新 单点查找(一般为单点更新 区间查找) 例如 区间(2,4)加1 则Updata(2 ...

  9. Chika and Friendly Pairs

    http://acm.hdu.edu.cn/showproblem.php?pid=6534 题意:给你一个序列,多次询问,每次让你回答一个区间中差的绝对值不超过一个给定常数K的元素对数. 题解:对序 ...

最新文章

  1. Linux sendmail 服务器
  2. 怎么开发一个npm包
  3. HDU4382(特殊的矩阵连乘)
  4. 【DP】小学生语文题(jzoj 5102)
  5. Think in AngularJS:对比jQuery和AngularJS的不同思维模式
  6. python 使用异常函数_您如何测试Python函数引发异常?
  7. 如何计算_振动筛处理能力如何计算呢
  8. mysql视频教程特密码_分享一个MySQL 密码增强插件
  9. “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
  10. .net 导出excel_.NET Core一行代码导入导出Excel生成Word
  11. ios property 之 strong weak unsafe_unretained
  12. 【好用的Mac分屏软件】Magnet for Mac 2.3
  13. 免费从网盘下载的卫星影像和高程DEM如何使用?
  14. 20道嵌入式工程师面试题(附答案)
  15. zemax仿真半导体激光器
  16. 学计算机智商,IQ最高的十大专业公布,考验你们智商的时刻到了!
  17. Mysql数据库安装使用教程05:mysql启动停止服务+数据库及表的相关基础操作
  18. python机器人编程——四轴UARM机械臂的运动控制(逆解)原理及python实现(下)
  19. SpringBoot——日志文件
  20. 计算机网络性能常见参数,计算机网络参数及其对网络性能的影响

热门文章

  1. Android 打包 aar文件的流程以及aar的引用
  2. LeetCode 35.搜索插入位置
  3. python基础——继承与派生、组合
  4. 【12】AngularJS 事件
  5. 使用 Flash Builder 的 Apple iOS 开发过程
  6. 关于SpringMVC和Struts2的区别
  7. (转)MySQL联表查询
  8. BaseTDI.sys 瑞星卡巴冲突,导致机器蓝屏
  9. 中国经济是前所未有二元经济(转)
  10. while(cina)在文件输入时,切换时会出现的问题