分析

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
const int N = 7e4+;
const int M = 2e5;
int n,m,w,h,x[N],y[N],p[M],t[M],L[M],R[M],D[M],U[M];
int head[N],nxt[M],cnt,dis[N],vis[N];
multiset<pair<int,int> >d[M*];
priority_queue<pair<int,int> >q;
inline void update(int le,int ri,int wh,int pl,int id){
d[wh].insert(mp(y[id],id));
if(le==ri)return;
int mid=(le+ri)>>;
if(mid>=pl)update(le,mid,wh<<,pl,id);
else update(mid+,ri,wh<<|,pl,id);
}
inline void go(int le,int ri,int wh,int id,int k){
if(le>=L[id]&&ri<=R[id]){
multiset<pair<int,int> >::iterator it,a;
it=d[wh].lower_bound(mp(D[id],));
while((it!=d[wh].end())&&(it->fi<=U[id])){
int x=it->se;
if(!vis[x]){
vis[x]=,dis[x]=k;
for(int i=head[x];i;i=nxt[i])q.push(mp(-k-t[i],i));
}
a=it,it++,d[wh].erase(a);
}
return;
}
int mid=(le+ri)>>;
if(mid>=L[id])go(le,mid,wh<<,id,k);
if(mid<R[id])go(mid+,ri,wh<<|,id,k);
return;
}
int main(){
int i,j,k;
scanf("%d%d%d%d",&n,&m,&w,&h);
for(i=;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
update(,w,,x[i],i);
}
for(i=;i<=m;i++){
scanf("%d%d%d%d%d%d",&p[i],&t[i],&L[i],&R[i],&D[i],&U[i]);
nxt[i]=head[p[i]];head[p[i]]=i;
}
vis[]=;
for(i=head[];i;i=nxt[i])q.push(mp(-t[i],i));
while(!q.empty()){
int u=q.top().se,v=-q.top().fi;
q.pop();go(,w,,u,v);
}
for(i=;i<=n;i++)printf("%d\n",dis[i]);
return ;
}

p5471 [NOI2019]弹跳的更多相关文章

  1. 【题解】Luogu P5471 [NOI2019]弹跳

    原题传送门 先考虑部分分做法: subtask1: 暴力\(O(nm)\)枚举,跑最短路 subtask2: 吧一行的点压到vector中并排序,二分查找每一个弹跳装置珂以到达的城市,跑最短路 sub ...

  2. 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)

    题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...

  3. luogu P5471 [NOI2019]弹跳

    luogu 因为是一个点向矩形区域连边,所以可以二维数据结构优化连边,但是会MLE.关于维护矩形的数据结构还有\(KD-Tree\),所以考虑\(KDT\)优化连边,空间复杂度\(m\sqrt n\) ...

  4. [NOI2019] 弹跳

    题意: 给你平面上的$n$个点,共有$m$个弹跳装置. 每个弹跳装置可以从点$p_{i}$以$t_{i}$的代价跳到矩形$(L_{i},D_{i}),(R_{i},U_{i})$中的任何一个点. 现在 ...

  5. [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)

    本题可以用的方法很多,除去以下三种我所知道的就还有至少三种. 方法一:类似线段树优化建图,将一个平面等分成四份(若只有一行或一列则等分成两份),然后跑Dijkstra即可.建树是$O(n\log n) ...

  6. luogu 5471 [NOI2019]弹跳 KDtree + Dijkstra

    题目链接 第一眼就是 $KDtree$ 优化建图然而,空间只有 $128mb$,开不下   时间不吃紧,考虑直接跑 $Dijkstra$ $Dijkstra$ 中存储的是起点到每个输入时给出的矩阵的最 ...

  7. [NOI2019]弹跳(KD-Tree)

    被jump送退役了,很生气. 不过切了这题也进不了队,行吧. 退役后写了一下,看到二维平面应该就是KD树,然后可以在KD树上做最短路,然后建立堆和KDTree.然后每次更新则是直接把最短路上的节点删掉 ...

  8. 题解 [NOI2019]弹跳

    题目传送门 题目大意 给出 \(n\) 做城市,每座城市都有横纵坐标 \(x,y\).现在给出 \(m\) 个限制 \(p,t,l,r,d,u\),表示从 \(p\) 城市出发,可以花费 \(t\) ...

  9. 【NOI2019】弹跳(KDT优化建图)

    Description 平面上有 \(n\) 个点,分布在 \(w \times h\) 的网格上.有 \(m\) 个弹跳装置,由一个六元组描述.第 \(i\) 个装置有参数:\((p_i, t_i, ...

随机推荐

  1. Spark-Core RDD转换算子-Value型

    1. map(func) 作用: 返回一个新的 RDD, 该 RDD 是由原 RDD 的每个元素经过函数转换后的值而组成. 就是对 RDD 中的数据做转换. 创建一个包含1-10的的 RDD,然后将每 ...

  2. 使用Jest测试JavaScript (入门篇)

    1 什么是 Jest? Jest是 Facebook 的一套开源的 JavaScript 测试框架, 它自动集成了断言.JSDom.覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架. ...

  3. 利用js使图片外层盒子的高等于适应图片的高

    JS代码如下:<script> $(window).load(function(){ var width=$(window).width(); var img_1=$(".hot ...

  4. C# 打印机连接状态判断

    原文:https://www.cnblogs.com/Old-Fish/p/6258118.html /// <summary> /// 判断是否连接打印机 /// </summar ...

  5. c# winfrom程序中 enter键关联button按钮

    1,关联按钮上的Key事件             在按钮上的keypress,keydown,keyup事件必须要获得焦点,键盘上的键才能有效.        private void btnEnt ...

  6. JavaScript基础8——弹窗案例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. Canvas和SVG的比较

    Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...

  8. 使用BaGet来管理内部Nuget包

    有的时候,我们想要制作一些nuget包,供自己内部调用,不想公开出去,那么就需要一个能够集中管理nuget包的服务了,今天我来给大家介绍一款轻便好用的包管理服务-----BaGet 下载并部署BaGe ...

  9. python面向对象--类和实例的认识

    '''1.数据属性 2.函数属性''' #创建一个类class Chinese: "这是一个中国人的类" #类属性 money=4000 #注意类和对象均用点来访问自己的属性 de ...

  10. python常用函数 U

    update(dict) 字典合并,生成的为新的字典,新字典操作不会影响老字典. 例子: