Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接
题意求给区间[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 莫队算法+树状数组相关推荐
- Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组
题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...
- HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...
- HDU - 5381 The sum of gcd(莫队/线段树区间合并)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...
- HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...
- HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)
Super Mario 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...
- Chika and Friendly Pairs(莫队+树状数组+离散化+预处理上下界)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6534 Chika and Friendly Pairs Time Limit: 2000/1000 M ...
- 2019CCPC湖南全国邀请赛-Chika and Friendly Pairs- 莫队+树状数组+离散化
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6534 思路: 莫队算法,树状数组求和.每个数对应的离散化之后的值需要打表存下来. Code: 1 # ...
- HDU ACM 4031 Attack (树状数组--单点查询+区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=4031 用了树状数组的区间更新 单点查找(一般为单点更新 区间查找) 例如 区间(2,4)加1 则Updata(2 ...
- Chika and Friendly Pairs
http://acm.hdu.edu.cn/showproblem.php?pid=6534 题意:给你一个序列,多次询问,每次让你回答一个区间中差的绝对值不超过一个给定常数K的元素对数. 题解:对序 ...
最新文章
- Linux sendmail 服务器
- 怎么开发一个npm包
- HDU4382(特殊的矩阵连乘)
- 【DP】小学生语文题(jzoj 5102)
- Think in AngularJS:对比jQuery和AngularJS的不同思维模式
- python 使用异常函数_您如何测试Python函数引发异常?
- 如何计算_振动筛处理能力如何计算呢
- mysql视频教程特密码_分享一个MySQL 密码增强插件
- “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
- .net 导出excel_.NET Core一行代码导入导出Excel生成Word
- ios property 之 strong weak unsafe_unretained
- 【好用的Mac分屏软件】Magnet for Mac 2.3
- 免费从网盘下载的卫星影像和高程DEM如何使用?
- 20道嵌入式工程师面试题(附答案)
- zemax仿真半导体激光器
- 学计算机智商,IQ最高的十大专业公布,考验你们智商的时刻到了!
- Mysql数据库安装使用教程05:mysql启动停止服务+数据库及表的相关基础操作
- python机器人编程——四轴UARM机械臂的运动控制(逆解)原理及python实现(下)
- SpringBoot——日志文件
- 计算机网络性能常见参数,计算机网络参数及其对网络性能的影响