#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 ...
随机推荐
- 【Azure Redis】中国区Redis在东三区的资源无法在通过门户上与北三区资源之间建立灾备链接
问题描述 为应用启用灾备管理,在北三区建立了一个Azure Redis,同时,在东三区也建立了一个同样的Prem级Redis服务.但是在建立灾备(DR:Disease Recovery)时候,却无法选 ...
- 【Azure App Service for Linux】Linux Web App如何安装系统未安装的包
问题描述 Linux Web App中如何安装系统默认未安装的包,如何来执行如 apt install XXX命令呢?现在遇见的问题时,通过Azure App Service门户中的SSH登录后,执行 ...
- opencv库图像基础1-python
opencv库图像基础-python 基本操作 图片颜色通道 非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序 argparse模块 argparse 库是 Python 标准库中用于命 ...
- 关于Java并发多线程的一点思考
写在开头 在过去的2023年双11活动中,天猫的累计访问人次达到了8亿,京东超60个品牌销售破10亿,直播观看人数3.0亿人次,订单支付频率1分钟之内可达百万级峰值,这样的瞬间高并发活动,给服务端带来 ...
- 聚焦企业流程智能化发展新趋势,中国信通院2022 RPA创新产业峰会即将开启
机器人流程自动化(Robotic Process Automation,RPA)是数字时代的重要劳动力之一,流程的自动化.智能化运行是企业释放运营能效.提升客户服务水平的重要路径. 近年来,各行业对R ...
- PWR & 低功耗三种模式
睡眠模式: int main(void) { OLED_Init(); OLED_ShowString(1, 1, "RxData:"); Serial_Init(); while ...
- .Net接口版本管理与OpenApi
前言 作为开发人员,我们经常向应用程序添加新功能并修改当前的 Api.版本控制使我们能够安全地添加新功能而不会造成中断性变更.一个良好的 Api 版本控制策略可以清晰地传达所做的更改,并允许使用现有 ...
- 基于4G的智能工牌解决方案特色解析
前记 随着数字化的不断发展以及cat1模块的竞争加剧.cat1无论从成本或者功耗上,都进化的特别快.这样的前提下,让基于4G可穿戴产品逐渐成为现实可穿戴产品必备.能解决以前很多不能解决的问题. 作 ...
- 生成文件名为系统时间的C源码实例
一 最近遇到了一个需要根据时间记录文件名的.先写一个实例来实战: #include<stdlib.h> #include<time.h> #include<stdio.h ...
- MediaBox音视频终端SDK已适配鸿蒙星河版(HarmonyOS NEXT)
2024年1月,HarmonyOS NEXT 鸿蒙星河版系统开发者预览版开放申请,该系统将只能安装为鸿蒙开发的原生应用,而不再兼容安卓应用.对此,阿里云MediaBox音视频终端SDK产品已实现功能的 ...