★實驗任務
已知乙個有 n 個數序列 a[i] ,在序列 a 中的區間 [l,r] 中的最小值為 a[p] , 求
a[p]*(a[l]+a[l+1]+...+a[r]) 的最大值為多少?
★資料輸入
第一行是乙個整數 n
第二行為 n 個整數對應 a[i]
對於 50%資料
1 <= n <= 5000
對於 100%資料
1 <= n <= 100 000
1<=a[i]<=1000000
★資料輸出
如題意所示
輸入示例 輸出示例
6 60
3 1 6 4 5 2
# include# define max 100002
int start [max];
int end[max];
__int64 data[max];
__int64 sum[max];
int main()
else
j = start[j] - 1;
} }
for(i=n;i>=1;i--)
else
j = end[j] + 1;
} }
sum[0] = 0;
for(i=1;i<=n;i++)
sum[i] = sum[i-1] + data[i];
__int64 answer = -1;
for(i=1;i<=n;i++)
printf("%i64d\n",answer);
} return 0;
}
區間最值問題
問題描述 給定m及n個數 1輸出每m個數中的最大數,即1m中的最大數,2m 1中的最大數 n m 1 n中的最大數,共n m 1個。陣列 將讀入的資料放到乙個線性表f陣列中,然後列舉開始點i,遍歷求出區間 i,i m 1 中最大值。堆 將資料組織成樹型結構,即將讀入的數值設計成乙個大根堆,則堆頂元素...
RMQ(區間最值問題)
1 概述 lca least common ancestors 即最近公共祖先,是指這樣乙個問題 在有根樹中,找出某兩個結點u和v最近的公共祖先 另一種說法,離樹根最遠的公共祖先 rmq range minimum maximum query 即區間最值查詢,是指這樣乙個問題 對於長度為n的數列a,...
RMQ問題(區間最值查詢)
有一類問題被稱作區間最值問題,描述的是,給定 n 個元素,需要查詢下標位於 p q 之間的最大 小值。首先確定,針對每一次查詢,肯定是不能動態求最值的,因為每次都要計算,可能造成比較多的時間耗費。有 一種比較好的解決辦法是,先得到所有結果,在查詢時直接取出結果。這樣,就需要一種資料結構,能夠覆蓋所有...