有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...