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