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.pswp.cn/news/537751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537751.shtml
英文地址,請注明出處:http://en.pswp.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;非工作日