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. Codeforces 425A

    点击打开题目链接 这题想了将近一天..越发觉得自己太弱(不过早已经习惯这样的自己了 :P)不过因为是自己独立想出来的,还是很高兴. 拿到题目,当看到数据量的时候,就感觉很明显的暴力. n×n×n×k也 ...

  2. 在浏览器中打开php文件时,是Linux中的哪个用户执行的?

    https://segmentfault.com/q/1010000002541340 如题,这样我就可以针对这个用户设置权限了.而且这个用户是怎么关联上的,怎么查看? 解答一: .是执行 PHP 指 ...

  3. 2018-8-10-WPF-轻量级-MVVM-框架入门-2.1.2

    title author date CreateTime categories WPF 轻量级 MVVM 框架入门 2.1.2 lindexi 2018-08-10 19:16:51 +0800 20 ...

  4. 什么是实例化? 标签: vb 2015-02-08 20:26 1026人阅读 评论(30) 收藏

    为什么要写这个博客呢?可能是因为自己的基础太差,昨天敲三层的注册,各层都敲完了以后,死活报错,无奈之下只能找晓婵求救,她只改了三个地方,犯了同一个错误,我的源码是这样写的:Dim uA As  Ent ...

  5. Laravel的请求声明周期

    声明周期概述# 开始# public/index.php 文件是所有对Laravel应用程序的请求的入口点.而所有的请求都是经由你的Web服务器(Apache/Nginx) 通过配置引导到这个文件.i ...

  6. mysql 开篇

    Mysql 教程 mysql是最流行的关系型数据库管理系统,在wab应用方面mysql是最好的RDBMS(Relational Database Manangement System: 关系数据库管理 ...

  7. PyTorch代码调试利器: 自动print每行代码的Tensor信息

    本文介绍一个用于 PyTorch 代码的实用工具 TorchSnooper.作者是TorchSnooper的作者,也是PyTorch开发者之一. GitHub 项目地址: https://github ...

  8. @雅礼集训01/13 - T1@ union

    目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @description@ ...

  9. day6_python之configparser_模块

    configparser_模块是为了解析.ini文件的配置 a.ini [xiechao] name=xiechao age=18 is_admin=True salary=1000000.12 [x ...

  10. centos下iptables安装

    [root@localhost ~]# yum install iptables -y[root@localhost ~]# yum install iptables-services 查看安装情况 ...