CF1045G AI robots

题目大意就不说了

这道题可以用CDQ分治做

但是,如何选择CDQ分治的维度一直是CDQ分治的难点所在

这道题我们有三种选择

1.让智商高的数智商低的

2.让看的近的数看的远的

3.让靠右的数靠左的

但是,1和3都不好满足让这两个机器人分别都能看到的要求(因为不保证所以的机器人的视野范围相同)

所以我们以其视野范围当做第一维(从大到小排序)

之后我们发现对于左边\(i\)

右边满足其智商限制的一定是一个区间,之后这个区间我们可以用双指针维护

之后将这个区间里的数加入权值树状数组查询

另外由于至于范围很大

我们要离散化,但是离散化\(a_i-r_i\)和\(a_i+r_i\)也应当离散化

所以数组开三倍,之前因为这个RE了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cctype>
using namespace std;
const int N = 5e5 + 3;
struct node{
int xi;
int ri;
int qi;
}a[N];
int b[N];
int n,k;
long long ans;
struct BIT{
int c[N << 1];
inline void ins(int x,int v){for(;x <= b[0];x += x & -x) c[x] += v;}
inline int query(int x){
int res = 0;
for(;x;x -= x & -x) res += c[x];
return res;
}
}T;
inline bool cmp1(node x,node y){
if(x.ri != y.ri) return x.ri > y.ri;
if(x.qi != y.qi) return x.qi < y.qi;
return x.xi < y.xi;
}
inline bool cmp2(node x,node y){
if(x.qi != y.qi) return x.qi < y.qi;
return x.xi < y.xi;
}
inline int read(){
int v = 0,c = 1;char ch = getchar();
while(!isdigit(ch)){
if(ch == '-') c = -1;
ch = getchar();
}
while(isdigit(ch)){
v = v * 10 + ch - 48;
ch = getchar();
}
return v * c;
}
inline void solve(int l,int r){
if(l == r) return ;
int mid = (l + r) >> 1;
solve(l,mid);solve(mid + 1,r);
sort(a + l,a + mid + 1,cmp2);sort(a + mid + 1,a + r + 1,cmp2);
int L = l,R = l - 1;
for(int i = mid + 1;i <= r;++i){
while(R + 1 <= mid && a[R + 1].qi <= a[i].qi + k) T.ins(a[R + 1].xi,1),R++;
while(L <= mid && a[L].qi < a[i].qi - k) T.ins(a[L].xi,-1),L++;
int from = lower_bound(b + 1,b + b[0] + 1,b[a[i].xi] - a[i].ri) - b;
int to = lower_bound(b + 1,b + b[0] + 1,b[a[i].xi] + a[i].ri) - b;
ans += T.query(to) - T.query(from - 1);
}
for(int i = L;i <= R;++i) T.ins(a[i].xi,-1);
}
int main(){
n = read(),k = read();
for(int i = 1;i <= n;++i){
a[i].xi = read();
a[i].ri = read();
a[i].qi = read();
b[++b[0]] = a[i].xi - a[i].ri;
b[++b[0]] = a[i].xi + a[i].ri;
b[++b[0]] = a[i].xi;
}
sort(b + 1,b + b[0] + 1);
b[0] = unique(b + 1,b + b[0] + 1) - b - 1;
for(int i = 1;i <= n;++i) a[i].xi = lower_bound(b + 1,b + b[0] + 1,a[i].xi) - b;
sort(a + 1,a + n + 1,cmp1);
solve(1,n);
printf("%I64d\n",ans);
return 0;
}

CF1045G AI robots的更多相关文章

  1. CF1045G:AI robots(CDQ分治)

    Description 火星上有$n$个机器人排成一行,第$i$个机器人的位置为$x_i$,视野为$r_i​$,智商为$q_i​$.我们认为第$i$个机器人可以看到的位置是$[x_i−r_i,x_i+ ...

  2. CF1045G AI robots(动态开点线段树)

    题意 火星上有$N$个机器人排成一行,第$i$个机器人的位置为$x_{i}$,视野为$r_{i}$,智商为$q_{i}$.我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i} ...

  3. Codeforces 1045G AI robots [CDQ分治]

    洛谷 Codeforces 简单的CDQ分治题. 由于对话要求互相看见,无法简单地用树套树切掉,考虑CDQ分治. 按视野从大到小排序,这样只要右边能看见左边就可以保证互相看见. 发现\(K\)固定,那 ...

  4. AI robots CodeForces - 1045G (cdq分治)

    大意: n个机器人, 位置$x_i$, 可以看到$[x_i-r_i,x_i+r_i]$, 智商$q_i$, 求智商差不超过$k$且能互相看到的机器人对数. 这个题挺好的, 关键是要求互相看到这个条件, ...

  5. 【cf1046】A. AI robots(动态开点线段树)

    传送门 题意: 坐标轴上有\(n\)个机器人,每个机器人带有属性\(x,r,q\),分别表示位置.可视半径以及智商. 现在定义智商相近为两个机器人的智商差的绝对值不超过$K. 现在问有多少对机器人,他 ...

  6. Theories of Deep Learning

    https://stats385.github.io/readings Lecture 1 – Deep Learning Challenge. Is There Theory? Readings D ...

  7. 2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)

    感受了一下ACM的感觉,然后被神题和神犇们暴踩了 夭寿啦,机房大佬非法组队啊 比赛前i207M插的“怕不是不到九点就要弃疗”的flag成功生效 一开始先扫了一遍题,我一开始以为A题是个扫一遍的题,然后 ...

  8. codeforce1046 Bubble Cup 11 - Finals 题解

    比赛的时候开G开了3h结果rose说一句那唯一一个AC的是羊的心态就崩了.. 这套题感觉质量挺好然后就back了下 A: AI robots 有三个限制条件:相互能够看见和智商的差.使用主席树,可以维 ...

  9. Bubble Cup 11 - Finals [Online Mirror, Div. 1]题解 【待补】

    Bubble Cup 11 - Finals [Online Mirror, Div. 1] 一场很好玩的题啊! I. Palindrome Pairs 枚举哪种字符出现奇数次. G. AI robo ...

随机推荐

  1. KiCad EDA 如何修改 Pcbnew 线路板的背景色?

    KiCad EDA 如何修改 Pcbnew 线路板的背景色? 关于背景色,传统的原理图是白色,线路板是黑色. EDA 软件 类型 颜色 Protel 原理图 浅黄色 Protel PCB 黑色 Orc ...

  2. 怎样做一个iOS App的启动分层引导动画?

    一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷 ...

  3. 阿里云发布敏感数据保护产品SDDP,数据贴身防护实现“外防内控”

    数据安全问题,尤其是个人信息保护问题,一直是所有企业和个人关注的重点问题,7月10日,阿里云针对云上企业正式发布一款敏感数据保护产品SDDP(Sensitive Data Detection and ...

  4. 邀您共赴数据库学术顶会ICDE 2019——阿里云专场 零距离接触达摩院数据库“最强大脑”

    摘要: 当学术大家遇到技术大拿,会碰撞出怎样的火花?为进一步加深产学研学术交流,阿里云将于ICDE 2019大会期间(4月9日)举办以“云时代的数据库”为主题的技术专场(Workshop) 作为全球数 ...

  5. @gym - 101137K@ Knights of the Old Republic

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点 M 条边的一张图. 每个点有两个属性 Ai, B ...

  6. JDK8中`Optional.orElse()` 和`Optional.orElseGet()`之间的区别

    看例子就明白了 ``` static String B() { System.out.println("B()..."); return "B"; } publ ...

  7. 微信小程序 mode 的几种模式

    mode="aspectFill" mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式. 模式 值 说明缩放 scaleToFill 不保持纵 ...

  8. 1、Ubuntu 16.04 安装.net core

    Register the Microsoft key register the product repository Install required dependencies 参考网址:https: ...

  9. @noi.ac - 489@ shuffle

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的序列 s1,s2,-,sn,它有 2^n− ...

  10. 2018-8-10-win10-uwp-获得元素绝对坐标

    title author date CreateTime categories win10 uwp 获得元素绝对坐标 lindexi 2018-08-10 19:16:51 +0800 2018-2- ...