以poj3264為例引入吧。其實還是很基礎的線段樹一種。這裡不用修改,只要建樹+查詢即可了。但是我一開始用c++的輸入輸出流配套io就tle了,換成c的scanf輸入就ac了,還是挺卡時間的吧。但處理區間rmq問題還是推薦st表,因為st表每次查詢就o(1),但線段樹的話,每次查詢的話就是乙個search過程,是o(logn)的複雜度,相比st表劣勢就出來了。不過這題資料範圍給的小,線段樹也能過。換成大一點的可能就tle了。
#include
#include
#include
#include
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define mem(a) memset(a,0,sizeof(a))
#define io ios::sync_with_stdio(false);cin.tie(0);
using
namespace std;
const
int inf=
0x3f3f3f3f
;const
int mod=
1e9+7;
ll input[
500010];
struct nodetree[
2000040];
int ans,n,m;
inline
void
build
(ll i,ll l,ll r)
ll mid=
(l+r)
>>1;
build(2
*i,l,mid)
;build(2
*i+1
,mid+
1,r)
; tree[i]
.sum=tree[
2*i]
.sum+tree[i*2+
1].sum;
tree[i]
.maxx=
max(tree[
2*i]
.maxx,tree[
2*i+1]
.maxx)
; tree[i]
.minn=
min(tree[
2*i]
.minn,tree[
2*i+1]
.minn);}
inline ll searchmax
(ll i,ll l,ll r)
inline ll searchmin
(ll i,ll l,ll r)
intmain()
}
資料結構 線性表功能實現
seqlist.h include typedef int datatype typedef struct seqlist seqlist void seqlistinit seqlist sl 初始化資料表 void seqlistdestory seqlist sl 銷毀順序表 void seq...
資料結構 鍊錶及鍊錶功能實現
typedef struct node listnode,linklist 舉例 1.設p指向鍊錶中結點ai 2.可呼叫c語言中malloc 函式向系統申請結點的儲存空間 linklist p p linklist malloc sizeof listnode 強制型別轉換 則建立乙個型別為link...
資料結構 線段樹
啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...