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 ...
随机推荐
- 应用程序无法正常启动0xc000007b怎么解决
解决方法两种: 1. 网上搜索中最常见的,缺少DirectX 9 ,去下载一个安上就OK了. 2.第二种情况比较操蛋,其实报的错误应该是:mfc100u.dll丢失 .我在两台电脑上装了相同系统后,台 ...
- oracle_存储过程小记
# 刷新会员标签函数 {color:red} fun_refresh_code{color} {noformat}CREATE OR REPLACE FUNCTION fun_refresh_code ...
- Window下安装npm
Node.js停火各大技术论坛都在讨论,前段时间工作太忙没时间学习,趁着周末空闲玩玩,在网上找了些资料发现Node.js本身有windows版和unix版下载和使用都挺方便但是其扩展模块依赖复杂通过手 ...
- 看阿里P9架构师如何向你定义架构及架构师
架构的定义 先来看看软件架构的普遍定义吧. 一个程序和计算系统软件体系结构是指系统的一个或多个结构.结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 体系结构并非可运行软件.确切的说, ...
- 20145329 《网络对抗技术》MSF基础应用
实践目标 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067;(2)一个针对浏览器的攻击,如ms11_050:(3)一个针对客户端 ...
- 关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释
初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题.出现如下警告或错误提示: warning: #223-D: function &qu ...
- node包管理工具--nvm(windows)
windows 安装nvw-windows 使用nvm工具: windows使用nvm-noinstall.zip安装 nvm-noinstall.zip 这个是绿色免安装版本,但是使用之前需要配置 ...
- Go第十篇之反射
反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息. 支持反射的语言可以在程序编译期将变量 ...
- Unity3D学习笔记(二十):Rect、Canvas、Toggle、Slider、ScrollBar
Rect Transform(锚点):图片中心的四个点,界面以雪花形式显示 当四个点在一起的时候组成锚点,当四个点分开的时候组成锚框(合则锚点,分则锚框) Anchors: ----Min x:控 ...
- Unity3D学习笔记(十):Physics类和射线
物理系统:碰撞器.触发器等 力:有大小有方向的矢量,有受力点位置(和向量的区别) ----F = ma(m质量,a加速度,质量越大,加速度越小,停下来越慢) ----m1v1 = m2v2(冲量守恒定 ...