E I Hate It 基礎線段樹

2022-04-11 04:48:07 字數 1690 閱讀 2040

time limit:3000ms     memory limit:32768kb     64bit io format:%i64d & %i64u

description

很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。

這讓很多學生很反感。

不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。

input

本題目包含多組測試,請處理到檔案結束。

在每個測試的第一行,有兩個正整數 n 和 m ( 0,分別代表學生的數目和操作的數目。

學生id編號分別從1編到n。

第二行包含n個整數,代表這n個學生的初始成績,其中第i個數代表id為i的學生的成績。

接下來有m行。每一行有乙個字元 c (只取'q'或'u') ,和兩個正整數a,b。

當c為'q'的時候,表示這是一條詢問操作,它詢問id從a到b(包括a,b)的學生當中,成績最高的是多少。

當c為'u'的時候,表示這是一條更新操作,要求把id為a的學生的成績更改為b。

output

對於每一次詢問操作,在一行裡面輸出最高成績。

sample input

5 61 2 3 4 5

q 1 5

u 3 6

q 3 4

q 4 5

u 2 9

q 1 5

sample output

565

9

hint

huge input,the c function scanf() will work better than cin

//線段樹的應用,一般做法即可。

1 #include 2 #include 34

struct

5shu[800005

];10

11int ax[200005

];12

13int max(int x,int

y)14

1718

void init (int left,int right,int

k)19

28int mid=(left+right)>>1

;29 init(left,mid,2*k);

30 init(mid+1,right,k*2+1

);31 shu[k].num=max(shu[2*k].num,shu[2*k+1

].num);32}

3334

void insert(int num,int n,int

k)35

41int mid=(shu[k].l+shu[k].r)/2;42

if (n<=mid) insert(num,n,2*k);

43else insert(num,n,2*k+1

);44

45 shu[k].num=max(shu[2*k].num,shu[2*k+1

].num);46}

4748

int query(int left,int right,int

k)49

6061

intmain()

6281}82

return0;

83 }

view code

線段樹 01 線段樹基礎

物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...

線段樹 基礎

d 基礎 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...

線段樹基礎

寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...