fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 400;
  4. const int maxval = 1e6;
  5. int a[maxn+5][maxn+5], m, n, pos[maxn*maxn+5][maxn+5], dp[maxn+5][maxn+5];
  6. vector <pair<int, int>> v[maxval+5];
  7. void read() {
  8. cin >> m >> n;
  9. for (int i = 1; i<=m; ++i) {
  10. for (int j = 1; j<=n; ++j) {
  11. cin >> a[i][j];
  12. v[a[i][j]].push_back({i, j});
  13. }
  14. }
  15. }
  16. void solve() {
  17. int cnt = 0;
  18. for (int i = 1; i<=maxval; ++i) {
  19. if (!v[i].empty()) {
  20. for (auto p : v[i]) {
  21. a[p.first][p.second] = cnt;
  22. }
  23. ++cnt;
  24. }
  25. }
  26. int ans = 0;
  27. for (int k = 1; k<=m; ++k) {
  28. for (int i = n; i>=1; --i) {
  29. for (int j = i; j<=n; ++j) {
  30. dp[i][j] = max({dp[i][j], dp[i+1][j], dp[i][j-1], pos[a[k][i]][i], pos[a[k][j]][j]});
  31. if (i < j) {
  32. dp[i][j] = max({dp[i][j], pos[a[k][i]][j], pos[a[k][j]][i]});
  33. if (a[k][i] == a[k][j]) dp[i][j] = k;
  34. }
  35. ans = max(ans, (j-i+1) * (k - dp[i][j]));
  36. }
  37. }
  38. for (int i = 1; i<=n; ++i) {
  39. pos[a[k][i]][i] = k;
  40. }
  41. }
  42. cout << ans;
  43. }
  44. int main() {
  45. ios_base::sync_with_stdio(false);
  46. cin.tie(0); cout.tie(0);
  47. read();
  48. solve();
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0.01s 28284KB
stdin
Standard input is empty
stdout
Standard output is empty