Submission #960390

#TimeUsernameProblemLanguageResultExecution timeMemory
960390AkibAzmainRectangles (IOI19_rect)C++17
37 / 100
869 ms1048576 KiB
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

long long count_rectangles (std::vector<std::vector<int> > a) {
  ll n = a.size ();
  ll m = a[0].size ();
  vector < vector < vector < ll > > >
    ra (n, vector < vector < ll > > (m, vector < ll > (m))),
    ca (m, vector < vector < ll > > (n, vector < ll > (n)));
  for (ll k = 0; k < n; ++k)
    for (ll i = 0; i < m; ++i)
      {
        int mx = 0;
        for (ll j = i + 2; j < m; ++j)
          {
            mx = max (mx, a[k][j - 1]);
            if (mx < a[k][i] && mx < a[k][j]) ra[k][i + 1][j - 1] = 1;
          }
      }
  for (ll k = 0; k < m; ++k)
    for (ll i = 0; i < n; ++i)
      {
        int mx = 0;
        for (ll j = i + 2; j < n; ++j)
          {
            mx = max (mx, a[j - 1][k]);
            if (mx < a[i][k] && mx < a[j][k]) ca[k][i + 1][j - 1] = 1;
          }
      }
  for (ll i = 1; i < n; ++i)
    for (ll j = 0; j < m; ++j)
      for (ll k = 0; k < m; ++k)
        ra[i][j][k] += ra[i - 1][j][k];
  for (ll i = 1; i < m; ++i)
    for (ll j = 0; j < n; ++j)
      for (ll k = 0; k < n; ++k)
        ca[i][j][k] += ca[i - 1][j][k];
  auto alp = [&] (auto &x, int a, int b, int c, int d)
  {
    return (x[d][a][b] - (c ? x[c - 1][a][b] : 0)) == d - c + 1;
  };
  int c = 0;
  for (ll i1 = 0; i1 < n; ++i1)
    for (ll i2 = i1; i2 < n; ++i2)
      for (ll j1 = 0; j1 < m; ++j1)
        for (ll j2 = j1; j2 < m; ++j2)
          if (alp (ca, i1, i2, j1, j2) && alp (ra, j1, j2, i1, i2))
            ++c;
  return c;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...