제출 #424038

#제출 시각아이디문제언어결과실행 시간메모리
424038schseRectangles (IOI19_rect)C++17
15 / 100
5072 ms521676 KiB
#include "rect.h" #include <bits/stdc++.h> using namespace std; #ifndef EVAL #include "grader.cpp" #endif struct staticrmq { vector<vector<int>> arr; void init(const vector<int> &a) { arr.resize(a.size(), vector<int>(__lg(a.size()) + 1)); for (int i = 0; i < a.size(); i++) arr[i][0] = a[i]; for (int e = 1; e < arr[0].size(); e++) for (int i = 0; i < a.size() - (1 << e) + 1; i++) arr[i][e] = max(arr[i][e - 1], arr[i + (1 << (e - 1))][e - 1]); } int query(int l, int r) { int lv = __lg(abs(r - l)); return max(arr[l][lv], arr[r - (1 << lv) + 1][lv]); } }; vector<staticrmq> rows, cols; bool check(int r1, int r2, int c1, int c2, std::vector<std::vector<int>> &a) { for (int e = c1 + 1; e < c2; e++) { int q = rows[e].query(r1 + 1, r2 - 1); if (q >= a[r1][e] || q >= a[r2][e]) return false; } for (int i = r1 + 1; i < r2; i++) { int q = cols[i].query(c1 + 1, c2 - 1); if (q >= a[i][c1] || q >= a[i][c2]) return false; } return true; } /* bool check(int r1, int r2, int c1, int c2, std::vector<std::vector<int>> &a) { for (int e = c1 + 1; e < c2; e++) { for (int i = r1 + 1; i < r2; i++) { if (a[i][e] >= a[r1][e] || a[i][e] >= a[r2][e]) return false; if (a[i][e] >= a[i][c1] || a[i][e] >= a[i][c2]) return false; } } return true; } */ long long count_rectangles(std::vector<std::vector<int>> a) { rows.resize(a[0].size()); cols.resize(a.size()); for (int i = 0; i < a.size(); i++) cols[i].init(a[i]); for (int i = 0; i < a[0].size(); i++) { vector<int> v; for (int e = 0; e < a.size(); e++) v.push_back(a[e][i]); rows[i].init(v); } long long count = 0; for (int r1 = 0; r1 < a.size(); r1++) { for (int c1 = 0; c1 < a[0].size(); c1++) { for (int r2 = r1 + 2; r2 < a.size(); r2++) { for (int c2 = c1 + 2; c2 < a[0].size(); c2++) { if (check(r1, r2, c1, c2, a)) count++; } } } } return count; }

컴파일 시 표준 에러 (stderr) 메시지

rect.cpp: In member function 'void staticrmq::init(const std::vector<int>&)':
rect.cpp:14:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |   for (int i = 0; i < a.size(); i++)
      |                   ~~^~~~~~~~~~
rect.cpp:16:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |   for (int e = 1; e < arr[0].size(); e++)
      |                   ~~^~~~~~~~~~~~~~~
rect.cpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |    for (int i = 0; i < a.size() - (1 << e) + 1; i++)
      |                    ~~^~~~~~~~~~~~~~~~~~~~~~~~~
rect.cpp: In function 'long long int count_rectangles(std::vector<std::vector<int> >)':
rect.cpp:68:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |  for (int i = 0; i < a.size(); i++)
      |                  ~~^~~~~~~~~~
rect.cpp:70:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |  for (int i = 0; i < a[0].size(); i++)
      |                  ~~^~~~~~~~~~~~~
rect.cpp:73:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |   for (int e = 0; e < a.size(); e++)
      |                   ~~^~~~~~~~~~
rect.cpp:80:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |  for (int r1 = 0; r1 < a.size(); r1++)
      |                   ~~~^~~~~~~~~~
rect.cpp:82:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |   for (int c1 = 0; c1 < a[0].size(); c1++)
      |                    ~~~^~~~~~~~~~~~~
rect.cpp:84:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |    for (int r2 = r1 + 2; r2 < a.size(); r2++)
      |                          ~~~^~~~~~~~~~
rect.cpp:86:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for (int c2 = c1 + 2; c2 < a[0].size(); c2++)
      |                           ~~~^~~~~~~~~~~~~
#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...