BZOJ3387柵欄行動



首先,很容易想到Dp。設f[i][0]表示第i個柵欄走左邊的最短路,f[i][1]表示第i個柵欄走右邊的最短路。

所以,我們要找一個剛好在第i個柵欄的左右邊界下面的柵欄。如圖所示:


則有:

f[i][0] = min(f[k][0] + |Left[i] - Left[k]| , f[k][1] + |Left[i] - Right[k]| )

f[i][1] = min(f[j][0] + |Right[i] - Left[j]| , f[j][1] + |Right[i] - Right[j]| )


那么,該怎樣求k和j呢?

很容易想到開一個數組,從小到大覆蓋。但這樣的時間復雜度是O(n^2)的。用線段樹區間修改,單點查詢就可以了。

附上程序:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <bitset>
#include <fstream>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctime>
#include <deque>
#include <vector>
#include <complex>
#include <utility>
using namespace std;
typedef long long LL;
#define INF 0x3fffffff
#define Maxn 100010int num[Maxn<<1];
int f[Maxn][2];int n,m;int a[Maxn],b[Maxn];#define L(u) u<<1
#define R(u) u<<1|1struct Tnode{int l,r;bool isset;int set;
};
Tnode tr[Maxn<<3];void build(int u,int l,int r)
{tr[u].l = l; tr[u].r = r;tr[u].isset = true; tr[u].set = 0;if(l<r){int mid = (l+r)>>1;build(L(u),l,mid);build(R(u),mid+1,r);}
}void pushdown(int u)
{if(tr[u].isset){tr[L(u)].isset = tr[R(u)].isset = true;tr[L(u)].set = tr[R(u)].set = tr[u].set;tr[u].isset = tr[u].set = 0;}
}void update(int u,int l,int r,int val)
{if(l<=tr[u].l && tr[u].r<=r){tr[u].isset = true;tr[u].set = val;return;}pushdown(u);int mid = (tr[u].l+tr[u].r)>>1;if(mid>=l) update(L(u),l,r,val);if(mid<r) update(R(u),l,r,val);
}int query(int u,int p)
{if(tr[u].l==tr[u].r)return tr[u].set;pushdown(u);int mid = (tr[u].l+tr[u].r)>>1;if(p<=mid) return query(L(u),p);else return query(R(u),p);
}int main()
{	scanf("%d%d",&n,&m);build(1,1,Maxn<<1);a[n+1] = b[n+1] = m;for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);int k1,k2;for(int i=1;i<=n+1;i++){k1 = query(1,a[i]+100005);k2 = query(1,b[i]+100005);f[i][0] = min(f[k1][0]+abs(a[i]-a[k1]),f[k1][1]+abs(a[i]-b[k1]));f[i][1] = min(f[k2][0]+abs(b[i]-a[k2]),f[k2][1]+abs(b[i]-b[k2]));if(a[i]+1<b[i])update(1,a[i]+100005+1,b[i]+100005-1,i);}printf("%d\n",f[n+1][0]);return 0;
}


轉載于:https://www.cnblogs.com/ouqingliang/p/9245248.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

udacity開源的數據_評論:Udacity數據分析師納米學位計劃

udacity開源的數據by David Venturi大衛文圖里(David Venturi) 評論&#xff1a;Udacity數據分析師納米學位計劃 (Review: Udacity Data Analyst Nanodegree Program) Udacity’s Data Analyst Nanodegree program was one of the first online data science programs in the …

凌晨四點鐘深圳的風景

科比有過一句很勵志的故事&#xff1a;凌晨四點鐘洛杉磯的風景。 很多人把科比當成榜樣&#xff0c;不僅僅因為他精湛的球技&#xff0c;更是因為他遠超常人的職業精神。 其實做到這一點&#xff0c;并不難&#xff0c;難的是堅持。堅持那么早時間起床&#xff0c;堅持十年如一…

小程序沉浸式_古北水鎮紅葉祭嵌入戲精學院 全新文旅沉浸模式讓游客嗨起來...

2020年10月17日-24日&#xff0c;古北水鎮第二屆紅葉祭火熱來襲。今年除了“超級漫展二次元度假”的模式&#xff0c;古北水鎮與頂級沉浸互動體驗運營方——INX戲精學院合作&#xff0c;在深度體驗空間的同時&#xff0c;加入了互動式的實景游戲體驗&#xff0c;通過演員互動&a…

又拍云劉平陽,理性競爭下的技術品牌提升之道

云服務市場趨漸平穩&#xff0c;在這種情況下&#xff0c;就需要通過對某一項技術的深入應用來實現服務的精致化。同時&#xff0c;對品牌的打造和包裝也必不可少。\\又拍云在2010年開始提供云服務&#xff0c;經過多年的發展&#xff0c;以及市場策略的轉變&#xff0c;決定對…

編寫代碼的工作在哪找_編寫事件代碼如何幫助我獲得了出色的工作

編寫代碼的工作在哪找Everyone kept telling me about the importance of networking, but it was always something I blew off. I’m pretty quiet and introverted, particularly when meeting strangers. I thought I just wasn’t built for networking.每個人都在不斷告訴…

int x = 0x13 c語言,2004年7月全國高等教育自學考試微型計算機原理與接口技術試題...

課程代碼&#xff1a;02205第一部分 C語言程序設計一、單項選擇題(在每小題的四個備選答案中&#xff0c;選出一個正確答案&#xff0c;并將正確答案的序號填在題干的括號內。每小題2分&#xff0c;共10分)1.4位無符號二進制數表示的數的范圍是( )。A.0&#xff5e;9999 B.…

iOS開發簡單高效的數據存儲

在iOS開發過程中&#xff0c;不管是做什么應用&#xff0c;都會碰到數據保存的問題&#xff0c;你是用什么方法來持久保存數據的&#xff1f;這是在幾乎每一次關于iOS技術的交流或討論都會被提到的問題&#xff0c;而且大家對這個問題的熱情持續高漲。本文主要從概念上把“數據…

Oracle中Date和Timestamp的區別

Date和Timestamp精度不一樣&#xff1a; 01&#xff09;Timestamp精確到了秒的小數點&#xff08;如&#xff1a;2018-11-13 16:40:03.698&#xff09;&#xff1b; 02&#xff09;Date只精確到整數的秒&#xff08;如&#xff1a;2018-11-13 16:40:03&#xff09; 轉載于:http…

table偏見和HTML仇外心理

by Anthony Ng由Anthony Ng <table>偏見和HTML仇外心理 (<table> prejudice and HTML xenophobia) I was looking over some HTML with a student the other day when we stumbled onto a <table>.前幾天&#xff0c;當我偶然發現一個<table>時&#…

回滾機制_【巨杉數據庫SequoiaDB】巨杉 Tech | 并發性與鎖機制解析與實踐

01概述數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據時&#xff0c;在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據&#xff0c;破壞數據庫的一致性。加鎖是實現數據庫并發控制的一個非常重要的技術。…

Android系統源碼學習——源碼目錄結構介紹

2019獨角獸企業重金招聘Python工程師標準>>> Android 4.0源碼目錄結構: 本文介紹Android源碼目錄結構&#xff0c;以便讀者理清Android編譯系統核心代碼在Android源代碼的位置。 Android源碼體積非常龐大&#xff0c;由Dalvik虛擬機、Linux內核、編譯系統、框架代碼…

簡答題c語言文件操作順序,計算機基礎與程序設計2012年4月真題試題(02275)

計算機基礎與程序設計2012年4月真題試題與答案解析(02275)計算機基礎與程序設計2012年4月真題試題與答案解析(02275)&#xff0c;本試卷總共100分。一、單項選擇題(本大題共20小題.每小題1分&#xff0c;共20分)在每小題列出的四個備選項中只有一個是符合題目要求的&#xff0c…

匯編實驗3

1.運行如下代碼&#xff1a; assume cs:codecode segment mov ah,2 mov dl,3 add dl,30h int 21h mov ah,2 mov dl,6 add dl,30h int 21h mov ah,4ch int 21hcode endsend 進行匯編運行之后結果為&#xff1a; 將第四行和第九行的寄存器dl的值修改之后代碼如下&#xff1a; a…

聽了一堂《**學院》的課,我也是醉了

這還是首席講師的ppt&#xff0c;這說話咋感覺&#xff0c;不像是技術出身&#xff0c;反倒是MongoDB的銷售人員呢。 這說話&#xff0c;不大講相對&#xff0c;凈他媽的 絕對&#xff0c;這水平&#xff0c;我真醉了。 這牛逼吹得&#xff0c;嘖嘖嘖。 我還是看書吧。 轉載于:…

react 組件引用組件_React Elements VS React組件

react 組件引用組件A few months ago I posted to Twitter what I thought was a simple question:幾個月前&#xff0c;我在Twitter上發布了一個我認為簡單的問題&#xff1a; What surprised me wasn’t the joint confusion around this question, but rather the amount o…

appium 環境搭建(不推薦安裝此版本appium,推薦安裝appium desktop)

一&#xff1a;安裝node.js 1、雙擊這個軟件 2、一鍵安裝&#xff0c;全都下一步&#xff0c;不要私自更改安裝路徑 3、打開cmd&#xff0c;輸入npm&#xff0c;出現如下截圖表示成功 二&#xff1a;安裝appium 1、雙擊appium-installer.exe 2、一鍵安裝&#xff0c;全都下一步…

二級c語言上機題庫及解析,2013年計算機二級C語言上機題庫及答案解析(3)

填空題給定程序中&#xff0c;函數fun的功能是:在形參ss所指字符串數組中&#xff0c;查找含有形參substr所指子串的所有字符串并輸出&#xff0c;若沒找到則輸出相應信息。ss所指字符串數組中共有N個字符串&#xff0c;且串長小于M。程序中庫函數strstr(s1, s2)的功能是在 s1串…

js 數組遍歷符合條件跳出循環體_C++模擬面試:從數組“緊湊”操作說開來

面試官自來也去掉一個字符串中的空格。假設用C語言來解答&#xff0c;字符串是char數組。O(n)時間復雜度實現不難&#xff0c;比如額外申請一個新數組&#xff0c;然后遍歷一遍字符串&#xff0c;將符合條件的字符存儲到新數組中&#xff0c;實現起來很簡單。但這顯然不能讓面試…

項目NABCD的分析

N&#xff1a;你的創意解決了用戶的什么需求 本項目解決了在校大學生和社會工程人士在計算一些工程測量中的需求&#xff0c; 可以通過自己提供的一些測得的已知數據來推算出自己想要的數據結果&#xff0c; 比用戶自己手動計算更有效更快更節省時間 A&#xff1a;有什么招數來…

git 命令git 地址_這是我上周使用的所有Git命令及其作用。

git 命令git 地址by Sam Corcos由Sam Corcos 這是我上周使用的所有Git命令及其作用。 (Here are all the Git commands I used last week, and what they do.) Like most newbies, I started out searching StackOverflow for Git commands, then copy-pasting answers, witho…