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
565hint9
huge input,the c function scanf() will work better than cin//線段樹的應用,一般做法即可。
1 #include 2 #include 34view codestruct
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 }
線段樹 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國在海岸線沿...
線段樹基礎
寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...