Submission #679129

#TimeUsernameProblemLanguageResultExecution timeMemory
679129cadmiumskyRectangles (IOI19_rect)C++14
0 / 100
786 ms343936 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; #define sz(x) (int)(x).size() using pii = pair<int,int>; using tii = tuple<int,int,int>; const int nmax = 25e2 + 5, inf = 1e9 + 5; int dirx[4] = {1, -1, 0, 0}; int diry[4] = {0, 0, 1, -1}; vector<vector<int>> mat, tmp; vector<pii> list[nmax * nmax]; int n, m, maxv; #define y1 rgbuih int x1, x2, y1, y2; void dfs(int x, int y) { if(tmp[x][y] != 0) return; x1 = min(x, x1); y1 = min(y, y1); x2 = max(x, x2); y2 = max(y, y2); tmp[x][y] = 1; for(int h = 0; h < 4; h++) dfs(x + dirx[h], y + diry[h]); return; } ll countforlim(int lim) { tmp = mat; vector<vector<int>> spart(n + 2, vector<int>(m + 2, 0)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) tmp[i][j] = tmp[i][j] > lim, spart[i][j] += spart[i - 1][j] + spart[i][j - 1] - spart[i - 1][j - 1]; } ll count = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { if(tmp[i][j] != 1 && mat[i][j] == lim) { x1 = n + 1, x2 = 0, y1 = m + 1, y2 = 0; dfs(i, j); if(spart[x2][y2] - spart[x1 - 1][y2] - spart[x2][y1 - 1] + spart[x1 - 1][y1 - 1] == 0 && x1 > 1 && x2 < n && y1 > 1 && y2 < m) { count++; //cerr << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\t' << lim << ' ' << mat[x1][y1] << '\n'; } } } } return count; } long long count_rectangles(std::vector<std::vector<int> > initmat) { { // normalizare map<int,int> nrm; for(auto &v : initmat) { for(auto &x : v) nrm[x]; } int cnt = 0; for(auto &[a, b] : nrm) b = cnt++; for(auto &v : initmat) { for(auto &x : v) x = nrm[x]; } maxv = cnt - 1; } n = initmat.size(); m = initmat[0].size(); mat.resize(n + 2, vector<int>(m + 2, inf)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { mat[i][j] = initmat[i - 1][j - 1]; } } //for(auto v : mat) { //for(auto x : v) //cerr << x << ' '; //cerr << '\n'; //} ll total = 0; for(int u = 0; u <= maxv; u++) { // a se schimba la <= maxv total += countforlim(u); } return total; }

Compilation message (stderr)

rect.cpp: In function 'long long int count_rectangles(std::vector<std::vector<int> >)':
rect.cpp:76:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   76 |     for(auto &[a, b] : nrm) b = cnt++;
      |               ^
#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...