进阶指南上的做法是分块的。。

但是线段树搞起来也挺快,将磁石按照距离排序,建立线段树,结点维护区间质量最小值的下标

进行拓扑,每次在可行的范围内在线段树中找到质量最小的下标取出,取出后再将线段树对应的点设置成0

查询时找区间不为0最小值的下标即可

#include<cstdio>
#include<algorithm>
#define N 250010
typedef long long ll;
int n,i,x0,y0,nowp,x,y,r,c,v[N<<],tmp,h=,t,q[N];ll nowr;
struct P{int m,p;ll d,r;}a[N];
inline bool cmp(P x,P y){return x.d<y.d;}
inline void read(int&a){
char c;bool f=;a=;
while(!((((c=getchar())>='')&&(c<=''))||(c=='-')));
if(c!='-')a=c-'';else f=;
while(((c=getchar())>='')&&(c<=''))(a*=)+=c-'';
if(f)a=-a;
}
inline ll sqr(ll x){return x*x;}
inline int lower(){
int l=,r=n,t=,mid;
while(l<=r)if(a[mid=(l+r)>>].d<=nowr)l=(t=mid)+;else r=mid-;
return t;
}
inline int merge(int x,int y){
if(!x)return y;
if(!y)return x;
return a[x].m<a[y].m?x:y;
}
inline void up(int x){v[x]=merge(v[x<<],v[x<<|]);}
void build(int x,int a,int b){
if(a==b){v[x]=a;return;}
int mid=(a+b)>>;
build(x<<,a,mid),build(x<<|,mid+,b),up(x);
}
void change(int x,int a,int b,int c){
if(a==b){v[x]=;return;}
int mid=(a+b)>>;
c<=mid?change(x<<,a,mid,c):change(x<<|,mid+,b,c);
up(x);
}
void ask(int x,int a,int b){
if(b<=c){tmp=merge(tmp,v[x]);return;}
int mid=(a+b)>>;
ask(x<<,a,mid);
if(c>mid)ask(x<<|,mid+,b);
}
int main(){
read(x0),read(y0),read(nowp),read(r),read(n),nowr=sqr(r);
for(i=;i<=n;i++){
read(x),read(y),read(a[i].m),read(a[i].p),read(r);
a[i].d=sqr(x-x0)+sqr(y-y0),a[i].r=sqr(r);
}
std::sort(a+,a+n+,cmp),build(,,n);
if(c=lower())while(){
tmp=,ask(,,n);
if(!tmp||a[tmp].m>nowp)break;
change(,,n,q[++t]=tmp);
}
while(h<=t){
nowp=a[q[h]].p,nowr=a[q[h++]].r;
if(c=lower())while(){
tmp=,ask(,,n);
if(!tmp||a[tmp].m>nowp)break;
change(,,n,q[++t]=tmp);
}
}
return printf("%d",t),;
}

bzoj3276磁力 两种要求下的最大值:分块or线段树+拓扑的更多相关文章

  1. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  2. Atitit 如何创新 创新只有在两种条件下发生:自由、效率。

    Atitit 如何创新 创新只有在两种条件下发生:自由.效率. 创新是如何发生的呢? 创新只有在两种条件下发生:自由.效率.在自由的环境下,对效率的追逐等于创新.如果你不自由,你的思想不够开阔,你脑洞 ...

  3. http与websocket(基于SignalR)两种协议下的跨域基于ASP.NET MVC--竹子整理

    这段时间,项目涉及到移动端,这就不可避免的涉及到了跨域的问题.这是本人第一次接触跨域,有些地方的配置是有点麻烦,导致一开始的不顺. 至于websocket具体是什么意义,用途如何:请百度. 简单说就是 ...

  4. 两种Linux下非交互式命令的实现

    一.概述 在Linux环境,有多种实现自己主动化的脚本语言.如Shell.Python.Perl.Tcl等. Shell语言因与Shell外壳结合紧密,是最常见的实现自己主动化的脚本语言. 同一时候, ...

  5. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  6. BZOJ3711 Druzyny 最大值分治、线段树

    传送门 被暴力包菜了,然而还不会卡-- 有一个很暴力的DP:设\(f_i\)表示给\(1\)到\(i\)分好组最多可以分多少组,转移枚举最后一个组.接下来考虑优化这个暴力. 考虑:对于每一个位置\(i ...

  7. [CSP-S模拟测试]:最大值(数学+线段树)

    题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...

  8. Java使用poi生成Excel,生成两种表格下拉框

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  9. virtualBox中有线和无线两种情况下centos虚拟机和本地机互ping的方案

    之前写微信点餐系统的时候,刚开始是无线连接,然后每次进去虚拟机ip和本地ip都会改变,所以每次都需要配置一下nginx,还有本地的路径.之后换有线连接,就研究了一下桥接模式有线情况下虚拟机静态ip设置 ...

随机推荐

  1. Django REST Framework API Guide 04

    本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...

  2. 【tmos】mvn package相关知识点(待补充...)

    SpringBoot项目打包跳过测试 <build> <plugins> <plugin> <groupId>org.springframework.b ...

  3. 新语法11. – LINQ

    LINQ分组: IEnumerable<IGrouping< group dog by dog.Age; 遍历分组: foreach (IGrouping<int, Dog> ...

  4. setInterval 传值设参数

    <script type="text/javascript" > window.onload=function(){ for(var i=1;i<3;i++){ ...

  5. 【转载】使用python库--Graphviz为论文画出漂亮的示意图

    原文: Drawing Graphs using Dot and Graphviz 1 License Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018 ...

  6. Jupyter如何将numpy数据以图像形式展现?

    示例如下: %matplotlib inline import matplotlib import matplotlib.ptplot as plt img = np.random.random((1 ...

  7. OVS-----CentOS7上搭建基于Open vSwitch的VxLAN隧道实验

    一.关于VXLAN VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多. ...

  8. 为Oracle GoldenGate准备数据库

    了解如何为Oracle GoldenGate准备数据库,包括如何配置连接和日志记录,如何在数据库中启用Oracle GoldenGate,如何设置闪回查询以及如何管理服务器资源. 为集成进程配置连接 ...

  9. xadmin插件开发

    参考:http://blog.csdn.net/qq_15682489/article/details/70174784 项目中新添加的organization模块需要在toolbar中添加“课表详细 ...

  10. 关于链表所有操作,面试必考C++

    #include <iostream> #include <stack> using namespace std; //链表的结构体 struct ListNode { int ...