HDU - 6534 Chika and Friendly Pairs
这个题其实也是很简单的莫队,题目要求是给一个序列,询问l-r区间内部,找到有多少对答案满足 i < j 并且
| a[ i ] -a[ j ] | <=k 也就是有多少对,满足差值小于k的个数。
把这个式子展开,其实就是-k<= a[ i ] -a [ j ] <= k 也就是 a[ j ] -k <= a[ i ] <= a[ j ] + k,也就是说,对于某个 j 位置,我们需要在询问的区间内,找到 i < j 并且在[ a[j] -k ,a[j] +k ] 范围中的数的个数,这个其实可以通过树状数组区间查询即可。
但是对于k来说,太大了,树状数组也开不下,所以我们要进行离散化,把a[i],a[i]+k,a[i]-k位置存下来即可(老套路了)保证每个位置都能找得到,然后区间查询即可,然后每次算贡献即可。
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxx = 2e5+;
int block;
int a[maxx];
std::vector<int>vx;
int sum[maxx];
int ans[maxx];
int num;
int n,m,k;
struct node{
int l,r;
int id;
friend bool operator < (const node &a,const node &b){
if(a.l/block==b.l/block){
return a.r<b.r;
}
return a.l/block<b.l/block;
}
}q[maxx];
int low[maxx];
int up[maxx];
int p[maxx];
int lowbit(int x){
return x&(-x);
}
void add(int x,int w){
for(int i=x;i<=*n;i+=lowbit(i)){
sum[i]+=w;
}
return ;
}
int getsum(int x){
int s=;
for(int i=x;i;i-=lowbit(i)){
s+=sum[i];
}
return s;
}
void add(int x){
num+=getsum(up[x])-getsum(low[x]-);
add(p[x],);
}
void del(int x){
add(p[x],-);
num-=getsum(up[x])-getsum(low[x]-);
}
int main(){
while(~scanf("%d%d%d",&n,&m,&k)){
block=sqrt(n);
memset(sum,,sizeof(sum));
memset(ans,,sizeof(ans));
vx.clear();
///绝对值小于等于K
for (int i=;i<=n;i++){
scanf("%d",&a[i]);
vx.push_back(a[i]);
vx.push_back(a[i]+k);
vx.push_back(a[i]-k);
}
num=;
sort(vx.begin(),vx.end());
vx.erase(unique(vx.begin(),vx.end()),vx.end());
int sz=vx.size();
for(int i=;i<=n;i++){
p[i]=lower_bound(vx.begin(),vx.end(),a[i])-vx.begin()+;
low[i]=lower_bound(vx.begin(),vx.end(),a[i]-k)-vx.begin()+;
up[i]=lower_bound(vx.begin(),vx.end(),a[i]+k)-vx.begin()+;
}
for(int i=;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+,q++m);
int l=,r=;
num=;
for(int i=;i<=m;i++){
while(l<q[i].l)del(l),l++;
// cout<<num<<" ";
while(l>q[i].l)l--,add(l);
// cout<<num<<" ";
while(r<q[i].r)r++,add(r);
// cout<<num<<" ";
while(r>q[i].r)del(r),r--;
// cout<<num<<" "<<endl;
ans[q[i].id]=num;
}
for(int i=;i<=m;i++){
printf("%d\n",ans[i]);
}
}
return ;
}
HDU - 6534 Chika and Friendly Pairs的更多相关文章
- HDU6534 Chika and Friendly Pairs(莫队,树状数组)
HDU6534 Chika and Friendly Pairs 莫队,树状数组的简单题 #include<bits/stdc++.h> using namespace std; cons ...
- 201⑨湘潭邀请赛 Chika and Friendly Pairs(HDU6534)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6534 题意: 给你一个数组,对于第i个数来说,如果存在一个位置j,使得j>i并且a[j]-k&l ...
- HDU-6534-Chika and Friendly Pairs (莫队算法,树状数组,离散化)
链接: https://vjudge.net/contest/308446#problem/C 题意: Chika gives you an integer sequence a1,a2,-,an a ...
- HDU 6534 莫队+ 树状数组
题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...
- 2019 CCPC 湖南全国邀请赛
A. Chessboard 做法1 单纯形. 做法2 最大费用可行流问题,行列模型. 对每行建一个点,每列建一个点.物品 \(i\) 在 \((r,c)\),那么 \(r\) 向 \(c\) 连流量为 ...
- AtCoder Regular Contest 092 C - 2D Plane 2N Points(二分图匹配)
Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...
- AtCoderBeginner091-C 2D Plane 2N Points 模拟问题
题目链接:https://abc091.contest.atcoder.jp/tasks/arc092_a 题意 On a two-dimensional plane, there are N red ...
- AtCoder Regular Contest 092 2D Plane 2N Points AtCoder - 3942 (匈牙利算法)
Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...
- HDU 5178 pairs —— 思维 + 二分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5178 pairs Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- linux系统级别的计划任务及其扩展anacrontab
这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/conrtab SHELL:就是运行计划任务的解释器,默认是bash PATH:执行 ...
- SASS在HTML5移动应用开发中的应用方法
一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.二.安装和使用 2.1 安装 SA ...
- Javascript实现信息滚动效果的方法
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- 杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动
ylbtech-杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动 1.返回顶部 1. 天气暖和了,连心情都是阳光的.然而,在这美好的时刻,漫天飞舞的杨柳絮,甚是煞风景.<ignor ...
- kubernetes1.5即将发布
Kubernetes1.5将会在12月9日正式GA 目前已经进行到了第三阶段后期:从2016年11月22日到2016年12月8日 建立1.5发布分支 所有修复bug的代码都合入1.5发布分支中 将1. ...
- arcgis信息窗口
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- lingo 出现63. MODEL IS ILL DEFINED 解决办法
63. MODEL IS ILL DEFINED. CHECK FOR UNDEFINED INDICES AND/OR CONDITIONS IN EXPRESSION: EXPRESSION. 还 ...
- Direct2D 第6篇 绘制多种风格的线条
原文:Direct2D 第6篇 绘制多种风格的线条 上图是使用Direct2D绘制的线条,Direct2D在效率上比GDI/GDI+要快几倍,GDI/GDI+绘图是出了名的"慢", ...
- JSP Web第三章整理复习 开发环境搭建
P86 WEB工作原理 用户使用浏览器通过HTTP协议请求服务器上的Web资源,服务器接收到该请求后,读取请求的URI所标识的资源,加上其他资源发送给客户端的浏览器,浏览器解析响应中的HTML数据, ...
- BOT建设经营转让,PPP公私合作
PPP.BOT两种模式有什么区别? BOT模式(build-operate-transfer),由投资方建设并专营一定期限最后移交政府的方式:PPP模式(public-private-partners ...