2019牛客多校第三场 F.Planting Trees
生活随笔
收集整理的這篇文章主要介紹了
2019牛客多校第三场 F.Planting Trees
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
題目鏈接
題解
題面上面很明顯的提示了需要嚴格\(O(n^3)\)的算法。
先考慮一個過不了的做法,枚舉右下角的\((x,y)\),然后二分矩形面積,枚舉其中一邊,則復雜度是\(O(n^3 \log n^2)\)的。
考慮另外一個做法,同樣是枚舉右下角\((x,y)\),然后枚舉一邊長度,顯然現在只需要知道左邊最遠能延伸到哪,這個玩意顯然是有單調性的,那么尺取一下,套個單調隊列判斷即可。
注意細節。
#include <bits/stdc++.h> using namespace std;namespace io { char buf[1<<21], *p1 = buf, *p2 = buf; inline char gc() {if(p1 != p2) return *p1++;p1 = buf;p2 = p1 + fread(buf, 1, 1 << 21, stdin);return p1 == p2 ? EOF : *p1++; } #define G gc#ifndef ONLINE_JUDGE #undef G #define G getchar #endiftemplate<class I> inline void read(I &x) {x = 0; I f = 1; char c = G();while(c < '0' || c > '9') {if(c == '-') f = -1; c = G(); }while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = G(); }x *= f; }template<class I> inline void write(I x) {if(x == 0) {putchar('0'); return;}I tmp = x > 0 ? x : -x;if(x < 0) putchar('-');int cnt = 0;while(tmp > 0) {buf[cnt++] = tmp % 10 + '0';tmp /= 10;}while(cnt > 0) putchar(buf[--cnt]); }#define in(x) read(x) #define outn(x) write(x), putchar('\n') #define out(x) write(x), putchar(' ')} using namespace io;#define ll long long const int N = 510;struct Node {int x, y, v; }; int T, n, m; int a[N][N], mx[N], mn[N]; int qmin[N], qmax[N];int main() {read(T);while(T--) {int ans = 0;read(n); read(m);for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) read(a[i][j]);for(int l = 1; l <= n; ++l) {for(int i = 1; i <= n; ++i) mn[i] = 1e9, mx[i] = 0;for(int r = l; r <= n; ++r) {for(int i = 1; i <= n; ++i) {mn[i] = min(mn[i], a[r][i]);mx[i] = max(mx[i], a[r][i]);}int cur = 1, l0 = 1, l1 = 1, r0 = 0, r1 = 0;for(int i = 1; i <= n; ++i) {while(l0 <= r0 && mn[qmin[r0]] > mn[i]) --r0;while(l1 <= r1 && mx[qmax[r1]] < mx[i]) --r1;qmin[++r0] = i; qmax[++r1] = i;while(l0 <= r0 && l1 <= r1 && cur <= i && mx[qmax[l1]] - mn[qmin[l0]] > m) {++cur;while(l0 <= r0 && qmin[l0] < cur) ++l0;while(l1 <= r1 && qmax[l1] < cur) ++l1;}if(mx[qmax[l1]] - mn[qmin[l0]] <= m) ans = max(ans, (r - l + 1) * (i - cur + 1));}}}outn(ans);} }轉載于:https://www.cnblogs.com/henry-1202/p/11247694.html
總結
以上是生活随笔為你收集整理的2019牛客多校第三场 F.Planting Trees的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宝可梦阿尔宙斯怎么看亲密度?
- 下一篇: 英雄联盟下载完事安装到百分之一百时候出来