CF1045G】的更多相关文章

CF1045G 看了下题解,动态开点线段树,好像挺难的 #include <map> #include <cstdio> #include <algorithm> using namespace std; const int N=100005,M=5000005,inf=1e9; int n,k,tot=0; map<int,int>mp; struct node{int x,r,q;}a[N]; inline bool cmp(node a,node b)…
CF1045G AI robots 题目大意就不说了 这道题可以用CDQ分治做 但是,如何选择CDQ分治的维度一直是CDQ分治的难点所在 这道题我们有三种选择 1.让智商高的数智商低的 2.让看的近的数看的远的 3.让靠右的数靠左的 但是,1和3都不好满足让这两个机器人分别都能看到的要求(因为不保证所以的机器人的视野范围相同) 所以我们以其视野范围当做第一维(从大到小排序) 之后我们发现对于左边\(i\) 右边满足其智商限制的一定是一个区间,之后这个区间我们可以用双指针维护 之后将这个区间里的数…
Description 火星上有$n$个机器人排成一行,第$i$个机器人的位置为$x_i$,视野为$r_i​$,智商为$q_i​$.我们认为第$i$个机器人可以看到的位置是$[x_i−r_i,x_i+r_i]$.如果一对机器人相互可以看到,且它们的智商$q_i$的差距不大于$k$,那么它们会开始聊天. 为了防止它们吵起来,请计算有多少对机器人可能会聊天. Input 第一行读入$n,k$. 后面$n$行每行$x_i,r_i,q_i$. Output 一行答案. Sample Input 3 23…
题意 火星上有$N$个机器人排成一行,第$i$个机器人的位置为$x_{i}$,视野为$r_{i}$,智商为$q_{i}$.我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i}+r_{i}]$.如果一对机器人相互可以看到,且它们的智商$q_{i}$的差距不大于$K$,那么它们会开始聊天. 为了防止它们吵起来,请计算有多少对机器人可能会聊天. 题解 先膜一下大佬->这里 我们先按视野降序排序,这样一个一个考虑,如果后面的能看到前面,那前面的也肯定能看到后面 这样,就是对于每…
只计算半径小的能看到的半径大的,因为如果计算半径大的看到半径小的,虽然q在其范围内,但是小的不一定能看到大的 那么我们将机器人按照半径降序排序 遍历一次,去查询在[x-r,x+r]范围的,智商在[q-k,q+k]范围内的机器人个数 可以抽象成矩形[x-r,x+r][q-k,q+k]在二维平面上包含的点个数 但是这题只需要每个q开个动态线段树来维护就行 查询时只要查询[q-k,q+k]棵线段树即可 #include<bits/stdc++.h> using namespace std; #def…