一道分治題

2021-08-10 04:29:28 字數 2198 閱讀 8892

有n個數分別為a1,a2,……,an,

for(i=1;i<=n;i++)

for(j=i;j<=n;j++)

ans+=(j-i+1)*min(i~j)*max(i~j)

求ans,n<=500000

t2考慮分治,首先想到的做法是每次找最大值,以最大值為中心分成兩段,時間複雜度ω(n lgn)。可是乙個有序的數列會把它卡成n²,所以一定要找中間值把區間斷開。令mid=(l+r)/2,對於i∈[l,mid],求出i~mid的字尾min[i]、max[i],對於i∈[mid+1,r],求出mid+1~i的字首min[i],max[i]。由於使用分治,所以只要考慮左端點i∈[i,mid],右端點j∈[mid+1,r]的區間對答案的貢獻。要考慮4種情況,就是最大值在左邊或右邊,最小值在左邊還是右邊。為了解決數字大小相同的問題,在大小相同時,預設靠前的值比較小。

1、 min[i]<=min[j]且max[i]>=max[j]從大到小列舉i,隨著i的減小,j的合法區域一定是一段區間[l,r],且l=mid+1,r單調遞增對答案的貢獻為

2、 min[i]>min[j]且max[i]=max[j]且min[i]>min[j]還是從大到小列舉i,j的合法區域依然是乙個區間[l,r],但是l,r都是∈[mid+1,r]的,這時需要維護的是乙個類似佇列的,不再是棧對答案的貢獻是

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...

一道演算法題

1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...

一道演算法題

include using namespace std const int size 5 int max sub array const int a,int n,int m int max matrix const int a size int row,int col,int subsize int...