2019牛客暑期多校訓練營(第三場)F 單調佇列

2022-08-03 12:21:15 字數 825 閱讀 7441

給乙個\(n\times n\)的矩陣,找乙個最大的子矩陣使其中最大值與最小值的差小於等於\(m\)。

枚舉子矩陣的上下邊界,同時記錄每一列的最大值和最小值。

然後列舉右邊界,同時用兩個單調佇列分別維護最大值和最小值,考慮當右邊界往右移動時,可行的最遠的左邊界一定是單調不減的,當列舉到第\(i\)列時且當前左邊界為\(dl\)時,兩個單調佇列維護的分別是區間\([dl,i]\)的最大值和最小值,最大值-最小值》m時把左邊界往右移,同時將單調佇列中下標小於\(dl\)的值出隊,直到得到可行的最遠左邊界,更新答案,複雜度為\(o(n^3)\)。

#include#define fi first

#define se second

#define pb push_back

#define ll long long

using namespace std;

const int inf=1e9;

const int mod=1e9+7;

const int maxn=1e5+10;

int t;

int n,m;

int a[510][510];

int mx[510],mn[510],q1[510],q2[510];

int main()

int l1=1,l2=1,r1=0,r2=0,dl=1;

for(int k=1;k<=n;++k)

ans=max(ans,(j-i+1)*(k-dl+1));}}

} printf("%lld\n",ans);

} return 0;

}

2019牛客暑期多校訓練營(第三場)

目錄 b crazy binary string 思維 d big integer 數論 f planting trees 思維 單調佇列 h magic line 計算幾何 j lru management 模擬 題意 計算最長的01子串和子串行,其中01數量相同。分析 對於子串那麼直接將0製成 ...

2019牛客暑期多校訓練營(第三場)F

這個學期終於結束了,暑假就要來了。然而,作為大學畢業要求的一部分,你必須在假期期間參加一些社會服務。最後,你決定加入乙個志願者團體,在山上植樹。為了簡化這個問題,讓我們用乙個n乘以n times n網格。讓我們給行編號1到n從上到下,給列編號1到n從左到右。用aij ij 表示第i行第j列的格仔的高...

牛客暑期多校訓練營B Boundary

給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...