CF1045G

看了下题解,动态开点线段树,好像挺难的

  1. #include <map>
  2. #include <cstdio>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N=100005,M=5000005,inf=1e9;
  6. int n,k,tot=0;
  7. map<int,int>mp;
  8. struct node{int x,r,q;}a[N];
  9. inline bool cmp(node a,node b){return a.r>b.r;}
  10. struct segtree{int l,r,sum;}Tree[M];
  11. inline int que(int x,int l,int r,int xx,int yy)
  12. {
  13. if(!x)return 0; if(xx<=l&&r<=yy)return Tree[x].sum; int mid=(l+r)>>1,re=0;
  14. if(xx<=mid)re+=que(Tree[x].l,l,mid,xx,yy);
  15. if(yy>mid)re+=que(Tree[x].r,mid+1,r,xx,yy); return re;
  16. }
  17. inline void ins(int po,int l,int r,int &x)
  18. {
  19. if(!x) x=++tot; Tree[x].sum++; if(l==r)return; int mid=(l+r)>>1;
  20. if(po<=mid)ins(po,l,mid,Tree[x].l);else ins(po,mid+1,r,Tree[x].r);
  21. }
  22. int main()
  23. {
  24. int i,j;long long re=0; scanf("%d%d",&n,&k);
  25. for(i=1;i<=n;i++)
  26. {
  27. scanf("%d%d%d",&a[i].x,&a[i].r,&a[i].q);
  28. }sort(a+1,a+n+1,cmp);
  29. for(i=1;i<=n;i++)
  30. {
  31. for(j=a[i].q-k;j<=a[i].q+k;j++)
  32. {
  33. re+=(long long)que(mp[j],-inf,inf,a[i].x-a[i].r,a[i].x+a[i].r);
  34. }ins(a[i].x,-inf,inf,mp[a[i].q]);
  35. }printf("%lld\n",re);
  36. }

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. kubernete 数据库 etcd

    etcdctl --cert-file /etc/ssl/etcd/ssl/member-pserver78.pem --key-file /etc/ssl/etcd/ssl/member-pserv ...

  2. 源码篇:Python 实战案例----银行系统

    import time import random import pickle import os class Card(object): def __init__(self, cardId, car ...

  3. [拍摄]『ROSE 拆解』SONY 摄像机镜头拆解。

    镜头是从一部很老的sony摄像机上拆下来的.具体型号记不清了.应该是DCR系列的某个型号.使用Hi8磁带.NNN年前摄像机因为意外进水报废...拆拆去最后只剩下镜头了.镜头总成. 图片:IMG_201 ...

  4. JaxbUtil转json转XML工具类

    json转换为XML工具类 package com.cxf.value; import org.springframework.util.StringUtils; import javax.xml.b ...

  5. vbox虚拟机和vm虚拟机 虚拟机网络不通的解决方法

    vm网络不通的情况: 第一步 :打开物理机, 选中“计算机”*(,右键—管理—服务,找到以VM开头的服务,选中后,右键—启动,就可以了.如图: 第二步: 这样基本就可以了,如果还不行 如果重启失效了, ...

  6. C#中byte[]类型转换为其它类型

    我们这里就举byte[]类型和long类型的转换,其它数据类型用BitConverter类以此类推: /// <summary> /// 字节数组转换为long类型 /// </su ...

  7. BZOJ3926 ZJOI2015 诸神眷顾的幻想乡 Trie、广义SAM

    传送门 树上的任意一条路径一定会在以某一个叶子节点为根的树上成为一条直上直下的链,而总共只有\(20\)个叶子节点. 于是每一次选所有叶子节点中的一个作为根,形成一个\(Trie\),把\(20\)个 ...

  8. Log4j使用笔记

            在工作过程中,常常需要查看后台日志,为了更好的记录日志,我们使用Log4j来记录日志. 一.maven依赖的配置         在maven中央库库里找到log4j的java包,添加 ...

  9. Bluedroid 函数分析:bta_dm_gattc_register

    我们先来看看在bluedroid 里面有多少地方调用到这里: 可以看出除了 它自己声明的地方,有三处 调用到这个函数. 一处是 进行discovery,一处是进行search的时候,还有一次是bta_ ...

  10. python基础学习笔记(八)

    创建自已对象就python非常核心的概念,事实上,python被称为面向对象语言,本章会介绍如何创建对象.以及面向对象的概念:继承.封装.多态. 多态: 可对不同类的对象使用同样的操作. 封装:对外部 ...