蒜頭君的玩具娃娃 線段樹

2021-09-30 20:45:34 字數 1423 閱讀 8849

第二次更新

輸出

樣例輸入

5 23 1 5 2 7

2 31 5

樣例輸出46

只要我們得到任意乙個區間的最大值和最小值,將其儲存在陣列 max 和 min 中,每查詢一次就輸出一次,就能愉快的ac這題了

max[ ]陣列和min[ ]陣列的建立方法與線段樹建樹方法一樣

建立 max[ ]陣列和 min[ ]陣列

void build(long long l,long long r,long long root)

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

build(l,mid,root<<1);

build(mid+1,r,root<<1|1);

max[root]=max(max[root<<1],max[root<<1|1]);

min[root]=min(min[root<<1],min[root<<1|1]);

}

總的**

#include#includeusing namespace std;

#define digit 1000101

long long data[digit],max[digit<<1|1],min[digit<<1|1];

long long length,len;

void build(long long l,long long r,long long root)

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

build(l,mid,root<<1);

build(mid+1,r,root<<1|1);

max[root]=max(max[root<<1],max[root<<1|1]);

min[root]=min(min[root<<1],min[root<<1|1]);

}long long query_max(long long l,long long r,long long st,long long ed,long long root)

long long query_min(long long l,long long r,long long st,long long ed,long long root)

void enter()

printf("\n");

times=length-len+1;

st=1;ed=len;

while(times--) }

int main()

這個演算法還有很大的不足:無法一次返回最大值和最小值

分別建立兩棵樹並分別查詢的時間複雜度難以接受

滑動視窗

以後再改

蒜頭君的猜想

有一天蒜頭君突發奇想,他有乙個猜想,任意乙個大於 2的偶數好像總能寫成 2 個質數的和。蒜頭君查了資料,發現這個猜想很早就被乙個叫哥德 的人提出來了,稱為哥德 猜想。目前還沒有證明這個猜想的正確性。蒜頭君告訴你乙個整數 n 讓你用這個數去驗證。注意 1 不是質數。輸入乙個偶數n 2輸出乙個整數表示有...

蒜頭君的排序

蒜頭君的排序 蒜頭君是乙個愛思考的好孩子,這一天他學習了氣泡排序,於是他就想,把乙個亂序排列通過氣泡排序排至公升序需要多少次交換,這當然難不倒他,於是他想來點刺激的,給定乙個 1 ldots n1 n 的排列,每次從該排列中選擇乙個區間 l,r l,r 問使用氣泡排序將該區間排至公升序需要多少次交換...

蒜頭君的排序

蒜頭君是乙個愛思考的好孩子,這一天他學習了氣泡排序,於是他就想,把乙個亂序排列通過氣泡排序排至公升序需要多少次交換,這當然難不倒他,於是他想來點刺激的,給定乙個 1 ldots n1 n 的排列,每次從該排列中選擇乙個區間 l,r l,r 問使用氣泡排序將該區間排至公升序需要多少次交換操作。第一行乙...