題目描述a
p 神牛準備給自己蓋一座很華麗的宮殿。於是,他看中了一塊n∗
m 的矩形空地。空地中每個格仔都有自己的海拔高度。ap
想讓他的宮殿的平均海拔在海平面之上(假設海平面的高度是0
,平均數都會算吧?)。而且,ap
希望他的宮殿盡量大,能夠容納更多的人來膜拜他。請問ap
的宮殿最後會有多大?
輸入
第一行為
n 和
m。之後
n 行,每行
m個數,描述的空地的海拔。
輸出
輸出一行,表示宮殿最大面積。
樣例輸入3
2 4 0
−10
8
−2 −
2
樣例輸出4
提示
對於30%
的資料,n,
m≤50
; 對於100%
的資料,n,
m≤200
解法
(首先,宮殿也是矩形= =)這題n
6 和n4
暴力很顯然在n
4 的思路上進行優化。保留枚舉子矩陣的左右端的列,在行的列舉上做優化。對於乙個確定的l、
r ,可以用行字首和o(
1)知道第i
行在這個區間內的值s[
i][r
]−s[
i][l
−1]
。 我們要找乙個平均值大於0
的區間,就是需要找到一段和大於0
的行。 對s
[i][
r]−s
[i][
l−1]
做字首和,即s[
k]=∑
ki=1
(s[i
][r]
−s[i
][l−
1])
問題現在就轉化成為找乙個i∈
[0,k
) 使得s[
k]−s
[i]>0
且i盡量小。
因為我們現在求乙個區間的值可以用
s 陣列相減得到結果,所以注意到乙個性質,如果對於乙個數i∈
[0,k
) ,還存在j∈
[0,i
) 且s[j
]<=s[
i],那麼還要i
幹什麼……
所有比s[i
] 大的,都比s[
j]大,與j
得到的答案也都更優。
於是乎……選擇性地保留一些
s來更新答案,在k
從上往下掃時,如果s[
k]比最後乙個記錄的
s 還小,就把s[
k]也記錄上
(這是乙個單調棧)
然後更新答案時二分查詢單調棧中第乙個可行元素。
時間代價n3
log(
n)
(題外話一:我還寫了個n3
log(
lim)
的線段樹硬上失敗……)
(題外話二:資料有點水,暴力優化一下就跑過了……)
**
#include
#define ll long long
#define n 250
#define lim 1000000000000
int n,m,ans,l,r,mid,q[n];
long long s[n][n],s[n];
inline int max(const int &a,const int &b)
printf("%d\n",ans);
}
NOIP2016模擬賽No 1 最小密度路徑
題目描述 這次的任務很簡單,給出了一張有 n 個點 m條邊的加權有向無環圖,接下來有q 個詢問,每個詢問包括2 個節點x 和y,要求算出從 x 到 y的一條路徑,使得密度最小 密度的定義為,路徑上邊的權值和除以邊的數量 輸入 第一行包括2 個整數n和 m 以下m 行,每行三個數字a b w 表示從a...
NOIP2016複賽模擬賽 朋友
問題描述 mxy 即將前往新世界。在前往新世界的過程中,ta 遇見了兩種人。一種是只和lowb 做朋友,即當且僅當自己 的能力值大於對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力 值小於對方時他們會成為朋友。現在告訴你兩種人的能力值。請你計算一共有多少對友好關係。輸入 每組測試資...
NOIP2016模擬 JackMa 貪心
問題描述 mr he 因討厭?手動和諧 而徹底放棄網購,他的日常用品都要到商場去購買,而且必須付現金。但是現 金購買,經常會遇到找零的問題,那麼現在請你幫助他解決這樣乙個問題 現在 mr he 手上有 n 種不同面值的硬幣,每種硬幣有無限多個。為了方便購物,他希望帶盡量 少的硬幣,但是要能組合出 1...