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

题意

火星上有$N$个机器人排成一行,第$i$个机器人的位置为$x_{i}$,视野为$r_{i}$,智商为$q_{i}$。我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i}+r_{i}]$。如果一对机器人相互可以看到,且它们的智商$q_{i}$的差距不大于$K$,那么它们会开始聊天。 为了防止它们吵起来,请计算有多少对机器人可能会聊天。

题解

先膜一下大佬->这里

我们先按视野降序排序,这样一个一个考虑,如果后面的能看到前面,那前面的也肯定能看到后面

这样,就是对于每一个机器人,在他前面有几个智商在$[q-k,q+k]$,位置在$[x-r,x+r]$

那么把这个东西看做一个矩形覆盖就可以了

然后因为智商这一维维数很小,我们可以对每一个智商开一个动态开点线段树,然后一个一个扫过去统计答案就可以了

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<map>
 6 #define ll long long
 7 using namespace std;
 8 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 9 char buf[1<<21],*p1=buf,*p2=buf;
10 inline int read(){
11     #define num ch-'0'
12     char ch;bool flag=0;int res;
13     while(!isdigit(ch=getc()))
14     (ch=='-')&&(flag=true);
15     for(res=num;isdigit(ch=getc());res=res*10+num);
16     (flag)&&(res=-res);
17     #undef num
18     return res;
19 }
20 const int N=1e5+5;
21 int n,k,m,b[N*3];ll res;
22 map<int,int> rt;int L[N<<5],R[N<<5],sum[N<<5],cnt=0;
23 void update(int p,int l,int r,int x){
24     ++sum[p];if(l==r) return;
25     int mid=(l+r)>>1;
26     if(x<=mid) update(L[p]=L[p]?L[p]:++cnt,l,mid,x);
27     else update(R[p]=R[p]?R[p]:++cnt,mid+1,r,x);
28 }
29 int query(int p,int l,int r,int ql,int qr){
30     if(ql<=l&&qr>=r||p==0) return sum[p];
31     int mid=(l+r)>>1,res=0;
32     if(ql<=mid) res+=query(L[p],l,mid,ql,qr);
33     if(qr>mid) res+=query(R[p],mid+1,r,ql,qr);
34     return res;
35 }
36 inline void ins(int q,int x){
37     if(rt.count(q)==0) rt[q]=++cnt;
38     update(rt[q],1,m,x);
39 }
40 inline int get(int q,int ql,int qr){
41     if(rt.count(q)==0) return 0;
42     return query(rt[q],1,m,ql,qr);
43 }
44 struct node{
45     int x,r,q;
46     node(){}
47     node(int x,int r,int q):x(x),r(r),q(q){}
48     inline bool operator <(const node &b)const
49     {return r>b.r;}
50 }a[N];
51 int main(){
52 //    freopen("testdata.in","r",stdin);
53     n=read(),k=read();
54     for(int i=1;i<=n;++i){
55         int x=read(),r=read(),q=read();
56         a[i]=node(x,r,q);
57         b[++m]=x,b[++m]=x-r,b[++m]=x+r;
58     }
59     sort(b+1,b+1+m),m=unique(b+1,b+1+m)-b-1;
60     sort(a+1,a+1+n);
61     for(int i=1;i<=n;++i){
62         int l=lower_bound(b+1,b+1+m,a[i].x-a[i].r)-b;
63         int r=lower_bound(b+1,b+1+m,a[i].x+a[i].r)-b;
64         int x=lower_bound(b+1,b+1+m,a[i].x)-b;
65         for(int j=a[i].q-k;j<=a[i].q+k;++j)
66         res+=get(j,l,r);
67         ins(a[i].q,x);
68     }
69     printf("%lld\n",res);
70     return 0;
71 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9749892.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android qq登录 获取用户信息吗,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

[PHP] 纯文本查看 复制代码<?php // headerheader("Content-Type:application/json");error_reporting(E_ALL^E_NOTICE^E_WARNING);// 获取QQ号$qq $_GET["qq"];// 过滤if (trim(empty($qq))) {echo json_encode(array(status > error,msg > 未…

Python3.8安装 jupyter报错 NotImplementedError

报错如下&#xff1a; 原因&#xff1a; 是由于 python3.8 asyncio 在 windows 上默认使用 ProactorEventLoop 造成的&#xff0c;而不是之前的 SelectorEventLoop。jupyter 依赖 tornado&#xff0c;而 tornado 在 window 上需要使用 SelectorEventLoop&#xff0c;所以产生这…

浅析Nginx 正向代理与反向代理

1、正向代理和反向代理的概念 无论是正向代理&#xff0c;还是反向代理&#xff0c;说到底&#xff0c;就是代理模式的衍生版本罢了。我们都学习过代理设计模式&#xff0c;都知道代理模式中有代理角色和被代理角色&#xff0c;为什么这么说&#xff0c;因为这两个角色对于我们…

pycharm 安装 jupyter

jupyter可以像笔记一样&#xff0c;在学习和整理思路时很好。 使用的python是3.7.5版本 windows安装步骤&#xff1a; cmd 再修改下pip的源&#xff0c;选择国内&#xff0c;这样快。 国内pip源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 广东 豆瓣https://pypi…

android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow

Does it support java 8 yet?Eclipse is displaying this as a problem, surely it does support 8 by now? In the release notes for revision 23.6 it says java 7 or higher, does this mean java 8 is included or? Wish theyd be more specific about such details. A…

或成为性能宠儿,荣耀8x Max 骁龙660版首销在即

今天已经是十一假期的最后一天了&#xff0c;假期马上就要结束了&#xff0c;虽然这有点让人遗憾&#xff0c;但是接下来的好消息让很多人的心情好了不少&#xff0c;那就是10月8日荣耀8x Max骁龙660版本就要在全平台开售了&#xff0c;这恐怕是节后最开心的事情了。此前&#…

绩效考核编写说明

第一步&#xff1a; 请大家从群文件下载自己的考核表&#xff0c;该表格是季度初填写的&#xff0c;与实际进度安排有偏差&#xff0c;需要调整&#xff08;见第三步&#xff09; 第二步&#xff1a; 请大家从群文件下载部门考核表&#xff0c;如第四季度该文件名“【预评分】…

android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?

在回答您的问题之前&#xff0c;我强烈建议您查看ExecutorServices&#xff0c;例如ThreadPoolExecutor。现在回答你的问题&#xff1a;如果要等待上一个线程完成&#xff0c;在开始下一步之前&#xff0c;您可以在之间添加thread.join()&#xff1a;for(int i 0; i < 10; …

读书笔记-说服力 让你的PPT会说话

说服力&#xff1a;让你的PPT会说话张志 包翔 刘俊前言优秀的幻灯片是内容和形式的完美统一&#xff0c;掌握配色排版特效的技术也很重要&#xff0c;不过对大部分人&#xff0c;这些基础操作都已经初步掌握了。要进一步提高&#xff0c;技术不是制作高水平PPT的主要障碍&#…

无法访问com.sun.beans.introspect.PropertyInfo

idea在install或者package项目的时候报错&#xff1a;无法访问com.sun.beans.introspect.PropertyInfo 原因是&#xff1a;idea编译该项目的jdk不是1.8 修复方法&#xff1a; idea---file---project structure 把本地安装的jdk1.8配置上 再运行问题解决

idea lombok 插件安装

下载了guns源代码&#xff0c;idea提示很多方法不存在。后来发现是没有安装 lombok 插件。 lombok让java代码更加简洁&#xff0c;具体介绍&#xff1a;https://www.cnblogs.com/heyonggang/p/8638374.html 安装&#xff1a; File---setting---plugins

怎么把pdf转换为html,如何将PDF转换成HTML网页格式呢?

原标题&#xff1a;如何将PDF转换成HTML网页格式呢&#xff1f;现在很多在校程序学生们时常在思考怎么对HTML网页进行编译以呈现出想要展现的内容。但是HTML犹如我们外语学习一样&#xff0c;一个网页有很多的HTML文件&#xff0c;超文本标记语言文件以.htm(磁盘操作系统DOS限制…

Epson C1100报错“Service Req E511”的处理方法

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/renyuansoft/blog/2231623

guns企业高级单体版(前后端不分离)运行启动

单体版分前后端分离与不分离&#xff0c;这里分享前后端不分离的搭建方法 访问guns官网https://www.stylefeng.cn&#xff0c;登录后可查看教程&#xff08;账号密码见群公告&#xff09; 官方教程不是最新的&#xff0c;有些地方写的不是很清楚 第一步 确认环境 JDK1.8 M…

华为手机应用鸿蒙os,华为手机内置应用逐渐向鸿蒙 OS 靠拢

IT 之家 3 月 21 日消息 华为在去年 12 月 16 日举行 HarmonyOS 2.0 手机开发者 Beta 活动。现场正式发布了 HarmonyOS 2.0 手机开发者 Beta 版本。同时&#xff0c;HarmonyOS 2.0 手机开发者 Beta 开启公测。华为表示&#xff0c;HarmonyOS 是面向万物互联时代的全场景分布式操…

分布式数据库中间件使用经验分享

最近公司新项目使用了华为云的DDM分布式数据库中间件服务&#xff0c;通过一段的时间的使用感觉还不错。近段时间发现有许多小伙伴也准备去使用这个服务&#xff0c;所以为大家分享一下使用 创建DDM服务的经验&#xff0c;帮助小伙伴们少走弯路。首先在使用创建DDM实例的时候小…

project设置6天工作制日历

1.新建工作日历&#xff0c;取名 2.在“工作周”选项里设置 主要用到的是“工作周” 在project标准日历里&#xff0c;星期一---星期五是有工作时间&#xff0c;8-12,13-17。星期六&#xff0c;星期日是没有工作时间的&#xff0c;即非工作日。只要设置工作时间&#xff0c;就…

html5播放器自动全屏,HTML5 video播放器全屏(fullScreen)实现的方法

这篇文章主要介绍了HTML5 video播放器全屏(fullScreen)方法实例,本文直接给出一个完整代码实例,需要的朋友可以参考下首先来说&#xff0c;这个标题具有误导性&#xff0c;但这样设置改标题也是主要因为video使用的比较多在html5中&#xff0c;全屏方法可以适用于很多html 元素…

阿里如何实现100%容器化镜像化?八年技术演进之路回顾(转)

本文系转载。可以参考文中的以下内容&#xff1a; 阿里的容器框架的演进路线&#xff1b;在大公司内部、跨多部门、并且已经有大量现有系统情况下的推广实施方案&#xff1b;框架设计的方法论、设计图纸等。八年时间&#xff0c;阿里集团实现了 100%内部容器化镜像化&#xff0…

project日历设置-大小周交替

关键点是用到日历中的“例外日期”的重复周期功能 效果 2020年1月 1月19日是 2020年春节调休&#xff0c;要上班&#xff0c;工作日 2020年2月 2月1日是2020年春节放假&#xff0c;不上班&#xff0c;非工作日