fork download
  1. #pragma GCC target("avx2")
  2. #pragma GCC optimize("O3")
  3. #pragma GCC optimize("unroll-loops")
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. // #define int long long
  8. #define FOR(i, l, r) for(int i = (l); i <= (r); i++)
  9. #define FOD(i, r, l) for(int i = (r); i >= (l); i--)
  10. #define fi first
  11. #define se second
  12. const int maxn = 400+ 10;
  13. const int mod = 1e9 + 7;
  14.  
  15. int n, m, ans = 0;
  16. int a[maxn][maxn];
  17. int tot;
  18. int num[maxn * maxn];
  19. short last[maxn * maxn][maxn];
  20. short h[maxn][maxn];
  21. int get(int x)
  22. {
  23. return lower_bound(num + 1, num + 1 + tot, x) - num;
  24. }
  25.  
  26. signed main()
  27. {
  28. ios_base::sync_with_stdio(0);
  29. cin.tie(0);cout.tie(0);
  30. cin >> n >> m;
  31. FOR(i, 1, n) FOR(j, 1, m)
  32. {
  33. cin >> a[i][j];
  34. num[++tot] = a[i][j];
  35. }
  36.  
  37. sort(num + 1, num + 1 + tot);
  38. tot = unique(num + 1, num + 1 + tot) - num - 1;
  39. FOR(i, 1, n) FOR(j, 1, m) a[i][j] = get(a[i][j]);
  40. FOR(i, 1, n)
  41. {
  42. FOR(j, 1, m)
  43. {
  44. h[j][j] = max(h[j][j], last[a[i][j]][j]);
  45. last[a[i][j]][j] = i;
  46. ans = max(ans, (i - h[j][j]));
  47. }
  48.  
  49. FOD(l, m, 1)
  50. {
  51. FOR(r, l + 1, m)
  52. {
  53. h[l][r] = max(h[l][r], max(h[l + 1][r], max(h[l][r - 1], max(last[a[i][r]][l], last[a[i][l]][r]))));
  54. ans = max(ans, (r - l + 1) * (i - h[l][r]));
  55. }
  56. }
  57. }
  58.  
  59. cout << ans << "\n";
  60. }
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
0