Submission #690518

#TimeUsernameProblemLanguageResultExecution timeMemory
690518mansur호화 벙커 (IZhO13_burrow)C++17
100 / 100
972 ms20560 KiB
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")

#include<bits/stdc++.h>	

using namespace std;

#define all(a) a.begin(), a.end()                                                   
#define rall(a) a.rbegin(), a.rend()                 
#define sz(a) (int)a.size()
#define pf push_front
#define pb push_back
#define vt vector
#define s second
#define f first
#define nl '\n'
 
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
     
vt<pii> rid = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
vt<pii> dir = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
 
const int N = 1111, mod = 998244353;

const ll inf = 1e9;
 
double eps = 1e-15;
                        
bool fl = 0;

int n, m, k;
int a[N][N];

int can(int x) {
    int b[n + 1][m + 1];
    for (int i = 1; i <= n; i++) {
    	for (int j = 1; j <= m; j++) {
    		b[i][j] = (a[i][j] >= x);
    	}
	}
	int d[n + 1][m + 2];
	for (int j = 1; j <= m; j++) {
		d[0][j] = 0;
		for (int i = 1; i <= n; i++) {
			d[i][j] = d[i - 1][j];
			if (!b[i][j]) d[i][j] = i;
		}
	}
	int tl[n + 1][m + 1];
	int tr[n + 1][m + 1];
	for (int i = 1; i <= n; i++) {
		stack<int> s;
		d[i][0] = inf;
		s.push(0);
		for (int j = 1; j <= m; j++) {
			while (d[i][s.top()] <= d[i][j]) s.pop();
			tl[i][j] = s.top() + 1;
			s.push(j);	
		}
		while (!s.empty()) s.pop();
		d[i][m + 1] = inf;
		s.push(m + 1);
		for (int j = m; j >= 1; j--) {
			while (d[i][s.top()] <= d[i][j]) s.pop();
			tr[i][j] = s.top() - 1;
			s.push(j);	
		}
    }
    int ans = 0;
	for (int i = 1; i <= n; i++) {
    	for (int j = 1; j <= m; j++) {
        	ans = max(ans, (tr[i][j] - tl[i][j] + 1) * (i - d[i][j])); 
        }
    }
    return ans;
}

void slv() {
	cin >> n >> m >> k;
	for (int i = 1; i <= n; i++) {
	 	for (int j = 1; j <= m; j++) {
	 		cin >> a[i][j];
	 	}
	}
	int l = 1, r = inf, vl;
	while (l <= r) {
		int m = (l + r) / 2;
		int v = can(m);
		if (v >= k) {
			l = m + 1;
			vl = v;
		}else r = m - 1;
	}
	cout << l - 1 << ' ' << vl << nl;
}                        
 
main() {
	//freopen("shops.in", "r", stdin);                                                                                     
	//freopen("shops.out", "w", stdout);                                                                                     
	ios_base::sync_with_stdio(0);	                                                                                       
	cin.tie(0);
	int tp = 1;
	if (fl) cin >> tp;
	while (tp--) {  	
		slv();
	}
}                                               

Compilation message (stderr)

burrow.cpp:101:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  101 | main() {
      | ^~~~
burrow.cpp: In function 'void slv()':
burrow.cpp:16:12: warning: 'vl' may be used uninitialized in this function [-Wmaybe-uninitialized]
   16 | #define nl '\n'
      |            ^~~~
burrow.cpp:89:22: note: 'vl' was declared here
   89 |  int l = 1, r = inf, vl;
      |                      ^~
#Verdict Execution timeMemoryGrader output
Fetching results...