hdu1754 求區間最值 線段樹 樹狀陣列

2021-06-09 15:00:15 字數 1343 閱讀 4961

題意不用解釋了

線段樹:

#include #include using namespace std;

#define lson l , m , rt << 1

#define rson m + 1 , r , rt << 1 | 1

const int maxn = 222222;

int max[maxn<<2];

void pushup(int rt)

void build(int l,int r,int rt)

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

build(lson);

build(rson);

pushup(rt);

}void update(int p,int add,int l,int r,int rt)

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

if (p <= m) update(p , add , lson);

else update(p , add , rson);

pushup(rt);

}int query(int l,int r,int l,int r,int rt)

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

int ret = 0;

//遞迴呼叫每回求最值

if (l <= m) ret = max(ret , query(l , r , lson));

if (r > m) ret = max(ret , query(l , r , rson));

return ret;

}int main()

} return 0;

}

樹狀陣列

#include#include#include #define n 200001

using namespace std;

int num[n],p[n];

int n;

int lowbit(int t)

void change()//找最大值初始化

}}void insert(int t,int sore)

}int getmax(int l,int r)//找最大值

}//r自減1,判斷r-lowbit(r)和l之間的關係如果l在區間內就不能減了而是繼續迴圈

return ans;//如果l比r-lowbit(r)小的話,就可以之間判斷ans和p[r]的最值了。

}int main()

else if(str[0] == 'u')

}} return 0;

}

HDU 1754(線段樹,單點覆蓋 詢問區間最值)

很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。本題目包含多組測試,請處理到檔案結束。在每個測試的第一行,有兩個正整數 n ...

hdu1754 線段樹單點替換 區間最值模板

題意 中文題誒 思路 線段樹單點替換 區間最大值查詢模板 1 include 2 include 3 include 4 define lson l,mid,rt 1 5 define rson mid 1,r,rt 1 1 6using namespace std 78 const int max...

hdu 1754 基礎線段樹

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