線段樹習題集(模板)

2021-08-21 21:48:00 字數 1731 閱讀 1756

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

這讓很多學生很反感。

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

input

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

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

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

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

565

9

#include #include #include #include #include #include using namespace std;

#define lson l,m,i*2

#define rson m+1,r,i*2+1

const int maxn=2e5+10;

typedef struct node

}node;

node node[maxn*4];

void push_up(int i)

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

int m=node[i].mid(); //m=(l+r)/2.0

build(lson); //build(l,m,i*2)

build(rson); //build(m+1,r,i*2+1)

push_up(i);

}void update(int l,int r,int i,int v,int num) //單點更新

int m=node[i].mid();

if(m>=num)

update(l,m,i*2,v,num);

else

update(m+1,r,i*2+1,v,num);

push_up(i);

}int m;

void query(int l,int r,int i) //查詢

int m=node[i].mid();

if(r<=m)

else

else

}}int main()

node;

node node[maxnode];

int father[max];

void buildtree(int i,int left,int right)

else

}void update(int ri)

int m;

void query(int i,int l,int r)

i = i << 1;

if(l <= node[i].right)

else

}i += 1;

if(r >= node[i].left)

else

}}int main()

string s;

while(cin >> s && s[0] != 'e')

if(s[0] == 'a')

if(s[0] == 's')}}

}

Python習題集(四)

如果乙個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。例如 153 1 3 5 3 3 3,因此 153 就是乙個水仙花數 那麼問題來了,求1000以內的水仙花數 3位數 int轉字串序列,獲取到每一位數 呼叫math.pow函式求立方和 三個數字立方和相加 lists for i in ...

Python習題集(十二)

請寫乙個函式find odd,引數是1個列表,請返回該列表 現奇數次的元素 比如 find odd 1,1,2,2,5,2,4,4,1,2,5 1 find odd 20,1,1,2,2,3,3,5,5,4,20,4,5 5 find odd 10 10 迴圈列表 呼叫列表內建統計函式計算當前元素出...

Python習題集(十六)

寫乙個函式replace,該函式引數是兩個字串,第乙個引數給出乙個源,第二個引數是指定範圍。要求該函式將 第乙個引數裡面的字串中 落在第二個引數指定範圍內的字串替換為 號 比如replace abcdef c e ab f replace rattle r z a le replace micros...