常用模板 線段樹單點操作

2022-08-04 07:48:12 字數 956 閱讀 6880

輸入

第一行兩個整數n,m,第二行n個整數表示初始時的陣列a[ ];

接下來m行,每行3個整數a,b,c,如果a=1,那麼輸出a[b]~a[c]中最大的數

若a=2,那麼將a[b]改為c

輸出

每行輸出乙個整數,對應每乙個操作a=1

超級簡單的線段樹模板題,一遍就過了,子程式太多,變數更多,容易搞混很尷尬,就在幾周前的noip中,有乙個dalao給我們得瑟說他會線段樹,千方百計地得瑟(雖然他考得並不好23333),然後羨慕的我們口水橫流啊,今天才發現,線段樹其實挺簡單的,廢話不多說,直接貼**

#include 

using

namespace

std;

int st[11000],a[11000],sr[11000];

void build(int z,int l,int r)

}void change(int z,int l,int r,int aim,int ans)

int mid=(l+r)/2;

if(aim<=mid) //這裡aim<=mid不解釋

change(z*2,l,mid,aim,ans);

else

change(z*2+1,mid+1,r,aim,ans); //加1加1加1別忘了

st[z]=max(st[z*2],st[z*2+1]); //最大值

}int find(int z,int wl,int wr,int l,int r) //wl想要的區間左節點,wr想要的區間右節點

int main()

return

0;}

歡迎來頂

線段樹(單點操作)

單點操作 元素 struct node tr maxn 2 節點型別 建樹 void pushup int m void build int m,int l,int r 直接結束 int mid l r 1 求中間值 build m 1,l,mid 左半邊 m 2 build m 1 1,mid 1...

線段樹 單點更新模板題

線段樹應該是資料結構中的一種吧,說白了,他就是一種工具,只要你學會了他,那麼你就可以在以後的學習中去用它。他的大致用法,就是把乙個一維陣列改變成乙個樹的結構,而且這個樹還是乙個完全二叉樹 上述圖就是把乙個1 8的區間變成了乙個二叉樹的結構,為什麼我們要這樣幹呢?這怎麼說呢?其實我也說不清楚。因為能力...

線段樹 (區間和 單點操作)

include include include include include include include include include include define fast ios sync with stdio false define ll long long pragma gcc o...