hdu1754 I Hate It 線段樹模板

2021-08-07 03:59:41 字數 1442 閱讀 9763

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

這讓很多學生很反感。

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

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

在每個測試的第一行,有兩個正整數 n 和 m ( 0

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

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

5 6 5 9

注意該題為更改操作

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 2e5+5;

struct nodetree[maxn<<2];

void buildtree(int o,int l,int r)

int mid = (l+r)>>1;

buildtree(o<<1,l,mid);

buildtree(o<<1|1,mid+1,r);

tree[o].mx = max(tree[o<<1].mx,tree[o<<1|1].mx);

tree[o].sm = tree[o<<1].sm + tree[o<<1|1].sm;

}void update(int o,int l,int r,int x,int y)

int mid = (l+r)>>1;

if (x > mid) update(o<<1|1,mid+1,r,x,y);

else update(o<<1,l,mid,x,y);

tree[o].mx = max(tree[o<<1].mx,tree[o<<1|1].mx);

tree[o].sm = tree[o<<1].sm + tree[o<<1|1].sm;

}int querymax(int o,int l,int r,int x,int y)

int mid = (l+r)>>1;

if (x>mid) return querymax(o<<1|1,mid+1,r,x,y);

else

if (y <= mid) return querymax(o<<1,l,mid,x,y);

else

return max(querymax(o<<1,l,mid,x,mid),querymax(o<<1|1,mid+1,r,mid+1,y));

}int main()

else }}

return

0;}

HDU 1754 I Hate It(單點更新)

很水的線段樹,單點更新 rmq更快 include includeint n int in 200010 struct treetree 540000 int max int a,int b void build int s,int t,int id int mid s t 1 build s,mi...

hdu 1754 I Hate It 樹狀陣列

小記 對於求區間的最值問題,如何利用樹狀陣列來解決它 idx i 表示1 i區間中最大的值,a是存放元素陣列 利用樹狀陣列來求解區間最值問題的原理就是樹狀陣列對二進位制的利用,對於樹狀陣列的第k個陣列元素值它的意義代表著區間 k lowbit k 1,k 的最大值,在它的下面有lowbit k 個類...

hdu 1754 I Hate It (線段樹版)

讀入的時候因為要先輸入字元c,所以要用getchar 和輸入時的 c處理掉空格,很煩,不按字元輸入而是 s輸入字串可避免這個問題 include include using namespace std define lson l,m,rt 1 define rson m 1,r,rt 1 1 def...