Nanami's Digital Board CodeForces - 434B (棋盘dp)
大意: 给定01矩阵, m个操作, 操作1翻转一个点, 操作2求边界包含给定点的最大全1子矩阵
暴力枚举矩形高度, 双指针统计答案
#include <iostream>
#include <algorithm>
#include <math.h>
#include <cstdio>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <string.h>
#include <queue>
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = 1e3+10, INF = 0x3f3f3f3f;
int n, m, q;
int a[N][N], U[N][N], D[N][N], L[N][N], R[N][N]; void init() {
REP(i,1,n) REP(j,1,m) if (a[i][j]) {
U[i][j]=U[i-1][j]+1;
L[i][j]=L[i][j-1]+1;
}
PER(i,1,n) PER(j,1,m) if (a[i][j]) {
D[i][j]=D[i+1][j]+1;
R[i][j]=R[i][j+1]+1;
}
} void update(int x, int y) {
a[x][y] ^= 1;
REP(i,1,n) U[i][y]=(a[i][y]?U[i-1][y]+1:0);
PER(i,1,n) D[i][y]=(a[i][y]?D[i+1][y]+1:0);
REP(i,1,m) L[x][i]=(a[x][i]?L[x][i-1]+1:0);
PER(i,1,m) R[x][i]=(a[x][i]?R[x][i+1]+1:0);
} int query(int x, int y) {
int ans = 0, t = U[x][y], l = y, r = y;
PER(i,1,U[x][y]) {
while (l>1&&U[x][l-1]>=i) --l;
while (r<m&&U[x][r+1]>=i) ++r;
if (U[x][l]>=i&&U[x][r]>=i) {
ans = max(ans, i*(r-l+1));
}
}
t = D[x][y], l = y, r = y;
PER(i,1,D[x][y]) {
while (l>1&&D[x][l-1]>=i) --l;
while (r<m&&D[x][r+1]>=i) ++r;
if (D[x][l]>=i&&D[x][r]>=i) {
ans = max(ans, i*(r-l+1));
}
}
t = L[x][y], l = x, r = x;
PER(i,1,L[x][y]) {
while (l>1&&L[l-1][y]>=i) --l;
while (r<n&&L[r+1][y]>=i) ++r;
if (L[l][y]>=i&&L[r][y]>=i) {
ans = max(ans, i*(r-l+1));
}
}
t = R[x][y], l = x, r = x;
PER(i,1,R[x][y]) {
while (l>1&&R[l-1][y]>=i) --l;
while (r<n&&R[r+1][y]>=i) ++r;
if (R[l][y]>=i&&R[r][y]>=i) {
ans = max(ans, i*(r-l+1));
}
}
return ans;
} int main() {
scanf("%d%d%d", &n, &m, &q);
REP(i,1,n) REP(j,1,m) scanf("%d", &a[i][j]);
init();
REP(i,1,q) {
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (op==1) update(x,y);
else printf("%d\n", query(x,y));
}
}
Nanami's Digital Board CodeForces - 434B (棋盘dp)的更多相关文章
- codeforces 434B B. Nanami's Digital Board(分治)
题目链接: B. Nanami's Digital Board time limit per test 1 second memory limit per test 256 megabytes inp ...
- Codeforces Round #248 (Div. 1) B. Nanami's Digital Board 暴力 前缀和
B. Nanami's Digital Board 题目连接: http://www.codeforces.com/contest/434/problem/B Description Nanami i ...
- Nanami's Digital Board
题意: 给出点(x1,y1),求以x=x1为上边界,或下边界:以y=y1为左边界,或右边界矩形的最大值(矩形内所有的点均为1) 定义四个数组lft[][],rht[][],up[][],down[][ ...
- 炮(棋盘DP)
一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...
- P1006 传纸条[棋盘DP]
题目来源:洛谷 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接 ...
- Codeforces Round #248 (Div. 1)——Nanami's Digital Board
题目连接 题意: 给n*m的0/1矩阵,q次操作,每次有两种:1)将x,y位置值翻转 2)计算以(x,y)为边界的矩形的面积最大值 (1 ≤ n, m, q ≤ 1000) 分析: 考虑以(x,y)为 ...
- codeforces248(div1) B Nanami's Digital Board
q次询问,每次询问能够对矩阵某一个值改变(0变1.1变0) 或者是查询子矩阵的最大面积,要求这个这个点在所求子矩阵的边界上,且子矩阵各店中全为1 用up[i][j]表示(i,j)这个点向上能走到的最长 ...
- codeforces 682D(DP)
题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ...
- codeforces 666A (DP)
题目链接:http://codeforces.com/problemset/problem/666/A 思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a ...
随机推荐
- linux常用命令:ss 命令
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- php new stdClass array 实例代码
php new stdClass array 实例代码 $searchResults = array ();// //$obj = array ("rs"=>array(), ...
- 简化document.createElement("div")动态生成层方法
我们在WEB开发时,很多时候往往需要我们 JavaScript 来动态建立 html 元素,动态的设置相关的属性.比方说我们想要建立一個 div 层,则可以使用以下代码实现. 一.直接建立functi ...
- SQL学习之Can't connect to MySQL server on localhost (10061)
最近升级 了系统,开机后连接MySQL报错,Can't connect to MySQL server on localhost (10061): 估计是升级系统清除了以前的缓存设置,网上很多方法是命 ...
- php json_decode返回null
在使用json_decode函数想把json串转化为数组的时候,出现了null,当时还以为是因为json对字符串的长度有限制,还以为是因为两边少了引号,经过多次处理,发现都没有效果. 百度各种帖子,发 ...
- Python3 tesseract加载chi_sim异常停止工作
Python3 tesseract加载chi_sim异常停止工作 原因: chi_sim.traineddata 和 tesseract3.0.2 版本不一致: 解决方案: 下载tesseract3. ...
- Linux服务器上Tomcat的Web工程部署
Linux服务器上Tomcat的Web工程部署 部署Web应用到Tomcat服务器就是将开放好的JavaWeb应用打包成war包,然后发布到tomcat服务器的webapps目录下: 步骤1,先进入t ...
- 《网络攻防》实验五:MSF基础应用
IE浏览器渗透攻击--MS11050安全漏洞 实验准备 1.两台虚拟机,其中一台为kali,一台为Windows Xp Professional(两台虚拟机可以相互间ping通). 2.亚军同学的指导 ...
- Python3基础 str 循环输出list中每个单词及其长度
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 高通平台启动log概述(PBL log、sbl1 log、kernel log)【转】
本文转自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平台启动log概述(PB ...