杭電 HOJ 1166 敵兵布陣 解題報告

2022-05-07 16:45:14 字數 728 閱讀 2914

直接求超時。用線段樹。簡單做法直接用2n陣列,以1為root,2*i為左節點,2*i+1為右節點。

求區間[a,b]和時,如果a為右節點,則減去左節點的值。如果b為左節點,則減去右節點的值。a,b迭代為自己的父母。當a,b相等時,加上當前節點的值,即為區間和。

我也是第一次接觸線段樹的概念。剛開始也想自己建立一棵樹。在網上找到了張昆瑋的線段樹的講稿,才發現可以直接用陣列。分享下:

#include using

namespace

std;

int s[131072

];int

main()

sta=1

for(i=sta;i)

cin>>s[i];

end=sta*2

;

for(;i)

s[i]=0

; sta--;

for(i=sta;i;i--)

s[i]=s[t=2*i]+s[t+1

];

while(scanf("

%s",str) && str[0]!='e'

)

printf(

"%d\n

",sum+s[m]);

}else}}

}}

個人感覺**不是很好看。還有就是不能用cin和cout,會超時。

杭電 1166 敵兵布陣 (線段樹)

c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...

杭電oj 1166 敵兵布陣(線段樹裸題)

題目鏈結 線段樹保留了二叉樹的結構特點,能夠在o log n o l og n 的時間內查詢一些區間的資訊,比如區間和,區間最大最小值,而且還支援資料更改。include using namespace std const int n 2e6 100 struct nodenode n 2 int ...

杭電1166 線段樹(單點更新)

線段樹只是acm眾多演算法中的很普遍的一種,但是他的效率非常高,一般演算法複雜度為o n 的題,通過線段樹之後,就會變成o log2 n 本文是以杭電acm1166題舉例,來對線段樹進行一些了解 杭電1166原題鏈結 比如說求5到12的總人數,用線段樹的話,你只要找到 5,7 8,10 11,12 ...