離散化 火燒赤壁

2021-08-14 05:08:11 字數 1067 閱讀 3595

題目描述

曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。

孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。

隆冬的十一月,天氣突然回暖,颳起了東南風。

沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然同時**。火借風勢,風助火威。十條火船,好比十條火龍一樣,闖進曹軍水寨。那裡的船艦,都擠在一起,又躲不開,很快地都燒起來。一眨眼工夫,已經燒成一片火海。

曹操氣急敗壞的把你找來,要你鑽入火海把連環線上著火的船隻的長度統計出來!

輸入輸出格式

輸入格式:

第一行:n

以後n行,每行兩個數:ai bi(表示連環線上著火船隻的起始位置和終點,-10^9<=ai,bi<=10^9)

輸出格式:

輸出著火船隻的總長度

分析

日常離散化,這題比塗色簡單一些。

題解推薦的是不用陣列標記,可我偏不信邪,用陣列標記的方法打了個o(n^2+n)的,tle乙個點。

我就決定一口氣「不撞南牆不回頭」了,優化原本n^2的標記演算法,決定用二分查詢來查詢x與y在離散線段上的位置。還真別說,我居然做出了正解以外的解誒。

時間複雜度被優化為o(nlogn+n)

#include 

#include

#include

using

namespace

std;

int n,a[20001],b[20001],c[40001];

int i,j,k,x,y,be,en;

long

long ass;

bool f[40001];

bool cmp(int a,int b)

int main()

sort(c+1,c+j+1,cmp);

for (i=1;i<=n;i++)

i=0;

while (iif (f[i])

洛谷 P1496 火燒赤壁(離散化

p1496 火燒赤壁 世界上只有一種英雄主義,就是認清了生活的本質後依然愛他。羅曼羅蘭 通往成功的道路上有很多挫折,這正是成功的意義所在。yxr 記今天下午上機退化成海淀區小學二年級水平。線性表不會,連簡單的矩陣乘法也不會。正文 題意很好理解,求火燒過的長度。簡單的做法是開乙個很大很大的陣列,有火為...

(Vij)火燒赤壁

描述 曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。隆冬的十一月,天氣突然回暖,颳起了東南風。沒想到東吳船隊離開北岸大約二里距離,前面十條大...

洛谷 火燒赤壁

曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。隆冬的十一月,天氣突然回暖,颳起了東南風。沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然...