線段樹 點修改 hdoj 1754

2021-06-22 01:59:26 字數 1581 閱讀 1933

problem 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 6

1 2 3 4 5

q 1 5

u 3 6

q 3 4

q 4 5

u 2 9

q 1 5

sample output

5 6 5

9 hint

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

//hdoj-1754-ac  線段樹模板,可用於區間max\min\sum等 

#include

#include

#include

#include

using namespace std;

#define m 210000

const int n=m*3;//乘以2不行,不太理解

int val[n],a[m];

int n,m;//頂點數、運算元

int ql,qr;//查詢次數多,故不作為函式引數

int modify_pos,modify_val;//單點修改,涵義見變數名

void f_in() int main(int argc, char *argv) { //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=eof){ f_in();getchar(); f_build_max(1,0,n-1); char ch; for(int i=0;i

HDOJ 1754 線段樹 單點更新

這道題是線段樹簡單的入門題,只是簡單考察了線段樹的基本使用,建樹等操作。這裡需要注意的是輸入要不使用scanf要不使用快速輸入。這裡的maxs陣列需要開大一點,4倍是最穩妥的,一定不會溢位。區間查詢的時候要注意if後不是之間使用else應該分開寫,因為兩個區間可能是相交的。單點更新,單點查詢 inc...

Lost Cows 線段樹點修改

題目大意 有編號為1 n的n頭牛,已知排在第i頭牛前面且比第i頭牛編號小的牛的數量為ai,求第i頭牛的編號 input c組資料,每組陣列乙個n,接著n個數字表示排在第i位的牛的ai.output 按順序輸出每位牛的編號.思路 從最後一頭牛開始,ans i 剩餘編號中的第ai小的編號,include...

hdu 1754 基礎線段樹

題目鏈結 思路 比較簡單的線段樹,區間求最值,單點更新。讀入字元的時候,最好用字元陣列儲存,使用 s讀入,如果使用 c 會t 好像是會吃掉換行符。include include include define maxn 2000005 using namespace std int stu maxn ...