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 ...
随机推荐
- Struts2快速后台验证 使用
为了和前台基于JavaScript的开源验证框架RapidValidation使用统一的验证规则, 最大限度的减少重复的后台验证代码, 使用方式简便, 扩展方便. https://blog.csdn. ...
- python之路----常用模块二
collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...
- Linux查看文件大小命令
Linux查看文件大小命令 du命令 (1)du -b filepath 参数-b表示以字节计数 du -b filepath 参数-b表示以字节计数 #示例: $ du -b ~/Downloads ...
- maven parent工程.pom修改后未自动更新
前两周,因为框架parent工程的pom文件做了一点变更,然后在测试服务器进行maven install的时候,死都找不到新的依赖,都把nexus翻了个遍,确定是最新的了,就是download不下来, ...
- 骁龙820和KryoCPU:异构计算与定制计算的作用 【转】
本文转载自:https://www.douban.com/group/topic/89037625/ Qualcomm骁龙820处理器专为提供创新用户体验的顶级移动终端而设计.为实现消费者所期望的创新 ...
- 【Maven安装】centos安装maven
实践证明,大多数的源码都需要maven的支持编译,所以maven和jdk环境都是必须的 一.官网下载 apache-maven-3.3.9-bin.tar.gz 注意:需要jdk1.7及以上 二.上传 ...
- 51nod 1043 幸运号码(数位dp
1043 幸运号码 1个长度为2N的数,如果左边N个数的和 = 右边N个数的和,那么就是一个幸运号码. 例如:99.1230.123312是幸运号码. 给出一个N,求长度为2N的幸运号码的数量 ...
- [BZOJ5139][Usaco2017 Dec]Greedy Gift Takers 权值线段树
Description Farmer John's nemesis, Farmer Nhoj, has NN cows (1≤N≤10^5), conveniently numbered 1…N. T ...
- IIS中添加ftp站点
1.创建Windows账号 右击点击“我的电脑”,选择“管理”打开服务器管理的控制台.展开“服务器管理器”,一路展开“配置”.“本地用户和组”,点“用户”项.然后在右边空白处点右键,选择“新用户”将打 ...
- @SuppressWarings注解的作用和用法
一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...