第二次更新
輸出
樣例輸入
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 問使用氣泡排序將該區間排至公升序需要多少次交換操作。第一行乙...