#zkw线段树,扫描线,dp,离散#NOIP2020.9.26模拟speike

分析
由于可以走边界,那么最短路径一定按横坐标递增并且经过矩形的顶点,
考虑扫描线,找到当前线段(矩形右边界可以忽略)两个端点离的最近而又可达的线段,
dp一下并用线段树维护就可以了
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=500011;
typedef long long lll; lll dp[N][2];
struct duan{int x,l,r;}line[N];
int w[N<<2],xt,q,b[N<<1],bas,n,m;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
bool cmp(duan x,duan y){return x.x<y.x;}
inline signed max(int a,int b){return a>b?a:b;}
inline lll min(lll a,lll b){return a<b?a:b;}
inline signed aabs(int x){return x<0?-x:x;}
inline signed query(int x){
rr int ans=1;
for (x+=bas;x;x>>=1)
ans=max(ans,w[x]);
return ans;
}
inline void update(int l,int r,int z){
for(l+=bas-1,r+=bas+1;l^r^1;l>>=1,r>>=1){
if (!(l&1)) w[l^1]=max(w[l^1],z);
if (r&1) w[r^1]=max(w[r^1],z);
}
}
signed main(){
freopen("speike.in","r",stdin);
freopen("speike.out","w",stdout);
n=iut(),m=1,line[1]=(duan){0,0,0},
line[2]=(duan){xt=iut(),0,0},q=2;
for (rr int i=1;i<=n;++i){
rr int lx=iut(),ly=iut(),rx=iut(),ry=iut();
if (lx>rx) swap(lx,rx); if (ly>ry) swap(ly,ry);
line[++q]=(duan){lx,ly,ry},b[++m]=ly,b[++m]=ry;
}
sort(b+1,b+1+m),m=unique(b+1,b+1+m)-b-1;
sort(line+2,line+1+q,cmp);
for (bas=1;(bas<<=1)<m+3;);
for (rr int i=1;i<=q;++i)
line[i].l=lower_bound(b+1,b+1+m,line[i].l)-b,
line[i].r=lower_bound(b+1,b+1+m,line[i].r)-b;
for (rr int i=2;i<=q;++i){
rr int t1=query(line[i].l),t2=query(line[i].r);
dp[i][0]=min(dp[t1][0]+aabs(b[line[i].l]-b[line[t1].l]),dp[t1][1]+aabs(b[line[i].l]-b[line[t1].r])),
dp[i][1]=min(dp[t2][0]+aabs(b[line[i].r]-b[line[t2].l]),dp[t2][1]+aabs(b[line[i].r]-b[line[t2].r])),
update(line[i].l,line[i].r,i);
}
return !printf("%lld",min(dp[q][0],dp[q][1])+xt);
}
#zkw线段树,扫描线,dp,离散#NOIP2020.9.26模拟speike的更多相关文章
- HDU 4366 Successor(树链剖分+zkw线段树+扫描线)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4366 [题目大意] 有一个公司,每个员工都有一个上司,所有的人呈树状关系,现在给出每个人的忠诚值和 ...
- 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题
“队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄> 线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...
- 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4422 我真服了..这题我能调一天半,最后还是对拍拍出来的...脑子还是有病啊 题解: ...
- POJ 1769 Minimizing maximizer(DP+zkw线段树)
[题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...
- zkw线段树详解
转载自:http://blog.csdn.net/qq_18455665/article/details/50989113 前言 首先说说出处: 清华大学 张昆玮(zkw) - ppt <统计的 ...
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- ZKW线段树入门
Part 1 来说说它的构造 线段树的堆式储存 我们来转成二进制看看 小学生问题:找规律 规律是很显然的 一个节点的父节点是这个数左移1,这个位运算就是低位舍弃,所有数字左移一位 一个节点的子节点是这 ...
- V-Parenthesis 前缀+ZKW线段树或RMQ
Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions. The i-th questio ...
随机推荐
- nginx中自带的一些变量参数说明
$args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...
- 【Azure Logic App】消费型逻辑应用在消费Service Bus时遇见消息并发速度慢,消息积压
问题描述 消费型逻辑应用(Consumption Logic App)使用触发器模式消费 Azure Service Bus的消息,当Service Bus中存在大量消息等待消费时,Logic App ...
- CXPACKET等待类型分析
背景 客户反馈今天8点钟开始进入业务高峰期后,数据库的CPU利用率非常高,基本达到了100%,前端应用也非常慢.怀疑是昨晚业务系统升级导致,请我们紧急协助分析. 现象 登录到SQL专家云,进入相关时间 ...
- 使用 Java 在Excel中创建下拉列表
下拉列表(下拉框)可以确保用户仅从预先给定的选项中进行选择,这样不仅能减少数据输入错误,还能节省时间提高效率.在MS Excel中,我们可以通过 "数据验证" 提供的选项来创建下拉 ...
- Java 小案列 this关键字使用+构造器 +方法+调用
1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...
- idea导入spring源码运行缺失cglib和objenesis的jar包的办法【亲测有效】
idea导入spring源码运行缺失cglib和objenesis的jar包的办法[亲测有效] 亲测有效,网上说的大多废话 上图,操作如下,运行gradle
- vscode 点击 import 的对象 from 带有 @ 不能自动跳转 - 要配置 jsconfig.json
问题 vscode 点击 import 的对象 from 带有 @ 不能自动跳转 - 要配置 jsconfig.json 答案 根目录 创建 jsconfig.json 20220808 更新 inc ...
- 魅族16T屏幕尺子
- 逆向通达信Level-2 续十一 (无帐号登陆itrend研究版)
<续九>无帐号打开了itrend研究版但是用不了.今次无帐号登陆itrend研究版可以使用行情. 演示三图 1. 首先成功在金融终端无帐号登陆成功. 2. 同理应用在itrend研究版,却 ...
- MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)
2024年1月,HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请,该系统将只能安装为鸿蒙开发的原生应用,而不再兼容安卓应用.对此,阿里云MediaBox音视频终端SDK产品已实现功能的 ...