题面

大意:给出n个弹弓,可以用ti的时间把xi位置运到yi,在给出m组询问,求xj到yj最小时间。

sol:首先如果不用弹弓,时间应为abs(xj-yj)。否则时间就是abs(xi-xj)+abs(yi-yj)+ti。这就需要拆开绝对值用线段树来维护了。大力枚举四种情况,建四次线段树,就可以过了。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
const int N=,inf=0x7fffffffffffff;
int n,m,cnt=,nn,hax[N],hay[N],ans[N];
struct node{int x,y,t,id;}p[N];
inline bool cmp(node aa,node bb){return (aa.x!=bb.x)?(aa.x<bb.x):(aa.y<bb.y);}
struct segtree{int l,r,mi;inline int mid(){return (l+r)>>;}}Tree[N<<];
#define c1 x<<1
#define c2 x<<1|1
inline void Up(int x){Tree[x].mi=min(Tree[c1].mi,Tree[c2].mi);}
inline void build(int l,int r,int x){Tree[x].l=l;Tree[x].r=r;if(l==r){Tree[x].mi=inf;return;}int mid=(l+r)>>;build(l,mid,c1);build(mid+,r,c2);Up(x);}
inline void ins(int x,int po,int v){if(Tree[x].l==Tree[x].r){Tree[x].mi=min(Tree[x].mi,v);return;}int mid=Tree[x].mid();if(po<=mid)ins(c1,po,v);else ins(c2,po,v);Up(x);}
inline int que(int l,int r,int x){if(Tree[x].l==l&&Tree[x].r==r)return Tree[x].mi;int mid=Tree[x].mid();if(r<=mid)return que(l,r,c1);else if(l>mid)return que(l,r,c2);else return min(que(l,mid,c1),que(mid+,r,c2));}
signed main()
{
freopen("1.in","r",stdin);
int i,x,y,t; scanf("%lld%lld",&n,&m);
for(i=;i<=n;i++)
{
scanf("%lld%lld%lld",&x,&y,&t); p[++cnt]=(node){x,y,t,}; hax[cnt]=x; hay[cnt]=y;
}
for(i=;i<=m;i++)
{
scanf("%lld%lld",&x,&y); p[++cnt]=(node){x,y,,i}; hax[cnt]=x; hay[cnt]=y; ans[i]=abs(x-y);
}sort(hax+,hax+cnt+); sort(hay+,hay+cnt+); sort(p+,p+cnt+,cmp);
nn=unique(hax+,hax+cnt+)-hax-; for(i=;i<=cnt;i++)p[i].x=lower_bound(hax+,hax+nn+,p[i].x)-hax;
nn=unique(hay+,hay+cnt+)-hay-; for(i=;i<=cnt;i++)p[i].y=lower_bound(hay+,hay+nn+,p[i].y)-hay;
build(,cnt,); for(i=;i<=cnt;i++)if(!p[i].id)ins(,p[i].y,-hax[p[i].x]-hay[p[i].y]+p[i].t);else ans[p[i].id]=min(ans[p[i].id],que(,p[i].y,)+hax[p[i].x]+hay[p[i].y]);
build(,cnt,); for(i=;i<=cnt;i++)if(!p[i].id)ins(,p[i].y,-hax[p[i].x]+hay[p[i].y]+p[i].t);else ans[p[i].id]=min(ans[p[i].id],que(p[i].y,cnt,)+hax[p[i].x]-hay[p[i].y]);
build(,cnt,); for(i=cnt;i>=;i--)if(!p[i].id)ins(,p[i].y,+hax[p[i].x]+hay[p[i].y]+p[i].t);else ans[p[i].id]=min(ans[p[i].id],que(p[i].y,cnt,)-hax[p[i].x]-hay[p[i].y]);
build(,cnt,); for(i=cnt;i>=;i--)if(!p[i].id)ins(,p[i].y,+hax[p[i].x]-hay[p[i].y]+p[i].t);else ans[p[i].id]=min(ans[p[i].id],que(,p[i].y,)-hax[p[i].x]+hay[p[i].y]);
for(i=;i<=m;i++)printf("%lld\n",ans[i]);
}

洛谷P4088 [USACO18FEB]Slingshot的更多相关文章

  1. 洛谷 P4088 [USACO18FEB] Slingshot P(线段树+二维数点)

    题目链接 题意:有一个数轴,上面有 \(n\) 个传送门,使用第 \(i\) 个传送门,你可以从 \(x_i\) 走到 \(y_i\),花费的时间为 \(t_i\) 秒.你的速度为 \(1\) 格/秒 ...

  2. P4088 [USACO18FEB]Slingshot 线段树+扫描线

    \(\color{#0066ff}{ 题目描述 }\) Farmer John最讨厌的农活是运输牛粪.为了精简这个过程,他产生了一个新奇的想法:与其使用拖拉机拖着装满牛粪的大车从一个地点到另一个地点, ...

  3. LUOGU P4088 [USACO18FEB]Slingshot(线段树)

    传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

随机推荐

  1. AI 梯度下降

    梯度下降(gradient descent),是一种用于最优化(通常是最小化),代价函数/损失函数/目标函数/误差函数/准则,的方法. 不过,最值有时很难找到,尤其是在高维情况下,所以常常把局部最优解 ...

  2. 循环神经网络RNN的基本介绍

    本博客适合那些BP网络很熟悉的读者 一 基本结构和前向传播 符号解释: 1. $c_{t}^{l}$:t时刻第l层的神经元的集合,因为$c_{t}^{l}$表示的是一层隐藏层,所以图中一个圆圈表示多个 ...

  3. JavaWeb学习总结-12 JSTL标签语言

    一 JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了 ...

  4. BootStrap学习(7)_轮播图

    一.轮播图 Bootstrap 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式.除此之外,内容也是足够灵活的,可以是图像.内嵌框架.视频或者其他您想要放置的任何类型的内容. 如果 ...

  5. Codeforces Round #481 (Div. 3)

    我实在是因为无聊至极来写Div3题解 感觉我主要的作用也就是翻译一下题目 第一次线上打CF的比赛,手速很重要. 这次由于所有题目都是1A,所以罚时还可以. 下面开始讲题 A.Remove Duplic ...

  6. item 4: 知道怎么去看推导的类型

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 对于推导类型结果的查看,根据不同的软件开发阶段,你想知道的信息的不 ...

  7. Mvc_前后端绑定数据json集合

    ViewBag.SysModuleList =new  List<SysModule>(){.....}; var data = @Html.Raw(Json.Encode(ViewBag ...

  8. 忘记mysql数据库root密码

    找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开,查找的方法如下: 打开后,搜索mysqld关键字 找到后,在mysqld下面添加skip-grant-tables,保存退出. PS: ...

  9. Python_命名空间和作用域_25

    # 函数进阶 a = def func(): print(a) func() # 命名空间和作用域 # print() # input() # list # #命名空间 有三种 #内置命名空间 —— ...

  10. SCRUM 12.20

    以下为我们爬虫遇到问题的报告 我们团队的m2阶段原本计划是爬取美团的信息以支持我们的app对比功能,但在这一阶段遇到很多问题,主要表现如下: 美团反爬机制: 由于我们团队人员在事先并不知道美团具有反爬 ...