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){return a.r>b.r;}
struct segtree{int l,r,sum;}Tree[M];
inline int que(int x,int l,int r,int xx,int yy)
{
if(!x)return 0; if(xx<=l&&r<=yy)return Tree[x].sum; int mid=(l+r)>>1,re=0;
if(xx<=mid)re+=que(Tree[x].l,l,mid,xx,yy);
if(yy>mid)re+=que(Tree[x].r,mid+1,r,xx,yy); return re;
}
inline void ins(int po,int l,int r,int &x)
{
if(!x) x=++tot; Tree[x].sum++; if(l==r)return; int mid=(l+r)>>1;
if(po<=mid)ins(po,l,mid,Tree[x].l);else ins(po,mid+1,r,Tree[x].r);
}
int main()
{
int i,j;long long re=0; scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].r,&a[i].q);
}sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)
{
for(j=a[i].q-k;j<=a[i].q+k;j++)
{
re+=(long long)que(mp[j],-inf,inf,a[i].x-a[i].r,a[i].x+a[i].r);
}ins(a[i].x,-inf,inf,mp[a[i].q]);
}printf("%lld\n",re);
}

CF1045G的更多相关文章

  1. CF1045G AI robots

    CF1045G AI robots 题目大意就不说了 这道题可以用CDQ分治做 但是,如何选择CDQ分治的维度一直是CDQ分治的难点所在 这道题我们有三种选择 1.让智商高的数智商低的 2.让看的近的 ...

  2. CF1045G:AI robots(CDQ分治)

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

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

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

  4. 线段树动态开点——cf1045G

    只计算半径小的能看到的半径大的,因为如果计算半径大的看到半径小的,虽然q在其范围内,但是小的不一定能看到大的 那么我们将机器人按照半径降序排序 遍历一次,去查询在[x-r,x+r]范围的,智商在[q- ...

随机推荐

  1. Android 解决Toast一直显示个不停的问题

    做程序的时候最常用的弹出大概就是Toast了.但有时候会发先一个特别尴尬的问题,就是:一旦你点击某个按钮次数多了,即使在程序退出后,Toast也弹个不停.什么原因造成的呢? 是这样的:我们为了方便,在 ...

  2. 9-(基础入门篇)云端安装MQTT服务器

    https://www.cnblogs.com/yangfengwu/p/9953703.html 记得把文件拷贝到上一节配置的和云端共享的那个盘里面,好拷贝文件到云服务器 进入到bin目录 咱先以控 ...

  3. 解决System.Runtime.CompilerServices.ExtensionAttribute..ctor 与 ‘ExtensionAttribute’ is ambiguous in the namespace ‘System.Runtime.CompilerServices’ 问题

    从VSS上获取以前的老项目,编译时报System.Runtime.CompilerServices.ExtensionAttribute..ctor 网上写的“删除 Newtonsoft.Json.N ...

  4. [Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD

    对HDFS 上的文件,采用绝对路径,来读取获得 RDD: In [102]: mydata=sc.textFile("file:/home/training/test.txt")1 ...

  5. sql 某字段存储另一个表的多个id值并以逗号分隔,现根据id去中文并拼接同样以逗号分隔

    首先介绍用到的两个函数 charindex(要查找的表达式1,表达式2),返回值为表达式1在表达式2中的下标,未找到则返回0.(sql的下标是从1开始的),例如 select charindex('s ...

  6. 【个人阅读】M1/M2阶段总结

    1.以前博客的链接 http://www.cnblogs.com/zyctsl/p/4028006.html http://www.cnblogs.com/zyctsl/p/4094011.html ...

  7. Linux学习期中总结

    一.<Linux内核分析>总结 (一)计算机是如何工作的 1.存储程序计算机工作模型 2. X86CPU的寄存器:通用寄存器.段寄存器.标志寄存器等. 3.计算机的汇编指令 (1)movl ...

  8. JS 字符串转换为number

    // '+ "42"' --> + 加上数字字符串可转换成数值 console.log(typeof (+ "42")); // 输出为 number

  9. HelloWorld.php

    没有写博的习惯,从今天开始.近期学习了下php,分享下我的第一个PHP. 工具:Hbuider+Wampserver 利用Wampserver就可以完成PHP脚本的编写和运行,本人之所以选择安装HBu ...

  10. 初学Java必写的小程序。

    1.矩形面积,周长封装测试. /** * @author Administrator *封装好的矩形类 *自己私有的长宽属性 *开放 求面积求周长的方法 和设置长宽的方法 */ public clas ...