華為筆試題 最高分是多少(線段樹)

2021-09-12 08:45:31 字數 1969 閱讀 2466

老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.

輸入描述:

輸入包括多組測試資料。

每組輸入第一行是兩個正整數n和m(0 < n <= 30000,0 < m < 5000),分別代表學生的數目和操作的數目。

學生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。

輸出描述:

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

輸入例子1:

5 7

1 2 3 4 5

q 1 5

u 3 6

q 3 4

q 4 5

u 4 5

u 2 9

q 1 5

輸出例子1:

565

9直接暴力肯定不行,也不能體現水準。。。。

採用線段樹

單點更新,區間最大值查詢的線段樹。。。

坑點:查詢的時候給的a,b有可能是a>b,所以需要判斷一下!

#includeusing

namespace

std;

#define max_v 30005

#define inf 999999

#define me(a,x) memset(a,x,sizeof(a))typedef

long

long

ll;struct

node

tree[max_v

<<2

];int a[max_v];//

存值int build(int l,int r,int k)//

從點k開始 建樹

int mid=(l+r)>>1

;

int x=build(l,mid,k<<1

);

int y=build(mid+1,r,k<<1|1

);

return tree[k].maxv=max(x,y);//

更新區間最大值

}int update(int v,int k,int w)//

從點k開始 找到第v個值的位置將值改為w

if(tree[k].l==v&&tree[k].r==v)//

找到第v個值的位置

int x=update(v,k<<1

,w);

int y=update(v,k<<1|1

,w);

return tree[k].maxv=max(x,y);

}int getmax(int l,int r,int k)//

從k開始 在第l個值和第r個值中間尋找最大值

if(tree[k].l>=l&&tree[k].r<=r)

int x=getmax(l,r,k<<1

);

int y=getmax(l,r,k<<1|1

);

return

max(x,y);

}int

main()

else

if(str[0]=='u'

) }}

return0;

}

posted @

2019-03-10 11:38

y先森0.0 閱讀(

...)

編輯收藏

華為上機筆試題 最高分是多少

1 最高分是多少 老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.輸入描述 輸入包括多組測試資料。每組輸入第一行是兩個正整數n和 m 0 n 30000,0 m 5000 分別代表學生的數目和操作的數目。學生id 編號從1編到n 第...

線段樹 最高分是多少

老師想知道從某某同學到某某同學當中,分數最高的是多少。現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。輸入包含多組測試資料。每組輸入第一行是兩個正整數n和m 0對於每一次詢問操作,在一行裡面輸出最高成績。5 6 1 2 3 4 5 q 1 5 u 3 6 q 3 4 q 4 ...

最高分是多少? 華為

程式設計題 最高分是多少 時間限制 1秒 空間限制 65536k 老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.輸入描述 輸入包括多組測試資料。每組輸入第一行是兩個正整數n和m 0 n 30000,0 m 5000 分別代表學生的...