Codeforces 372 B. Counting Rectangles is Fun
$ >Codeforces \space 372 B. \ Counting\ Rectangles\ is\ Fun<$
题目大意 :
给出一个 \(n \times m\) 的 \(01\) 矩阵,有 \(q\) 次询问,每次给出一个矩形 $ x_1, x_2, y_1, y_2$ ,求有多这个矩形的有多少个全 \(0\) 子矩形\(1 \leq n, m \leq 50, 1 \leq q \leq 3 \times 10^5\)
解题思路 :
设 \(g(x, y, l, r)\) 表示以 \(x\) 为底,满足上边界 \(\leq y\) , 左边界 \(\geq l\) ,右边界 \(\leq r\) 的矩形的数量
那么对于一组询问 \(x_1, x_2, y_1, y_2\),\(Ans = \sum_{i = x_1}^{x_2} g(x_2, x_1, y_1, y_2)\)
所以直接考虑怎么求 \(g(x, y, l, r)\) 即可,问题转化为上下左右边界已经框好,求有多少个贴着下边界的全 \(0\) 子矩形
考虑维护一条从左边界到右边界的扫描线,每次计算当前的右端点向左延伸形成的子矩形的个数
考虑对于当前右端点 \(r\) 有一个左端点 \(l\), 设 \(len(x, y)\) 表示从点 \((x, y)\) 向上能延伸的 \(0\) 的个数
那么 \(l, r\) 作为左右端点能形成的全 \(0\) 子矩形的个数就是 \(\min(len(x, j))\ \ l \leq j \leq r\)
观察发现,对于每一个区间的答案其实就是这个区间 \(len\) 的最小值,直接枚举左端点并用单调栈维护即可
此时求 \(g\) 的复杂度是 \(O(n^5)\) 级别,由于 \(n, m\) 很小只有 \(40\) 所以可以接受,之后的询问可以直接预处理答案,总复杂度是 \(O(n^5 + q)\)
```cpp
/*program by mangoyang*/
#include
#define inf (0x7f7f7f7f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a)
inline void read(T &x){
    int f = 0, ch = 0; x = 0;
    for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
    for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
    if(f) x = -x;
}
#define N (45)
#define x1 xx1
#define y1 yy1
#define x2 xx2
#define y2 yy2
char s[N][N];
int f[N][N][N][N], g[N][N], xx[N], ff[N], n, m, q, top;
int main(){
	read(n), read(m), read(q);
	for(int i = 1; i = 1; k--, tot++)
				if(s[k][j] == '1') break;
			g[i][j] = tot;
		}
	for(int x1 = 1; x1 = 1; i--) res += (xx[i] - xx[i-1]) * ff[i];
					f[x1][y1][x2][y2] = res;
				}
			}
	for(int x1 = 1; x1  x1) f[x1][y1][x2][y2] += f[x1][y1][x2-1][y2];
	for(int i = 1, x1, x2, y1, y2; i 
  </font>
Codeforces 372 B. Counting Rectangles is Fun的更多相关文章
- CodeForces 372 A. Counting Kangaroos is Fun
		
题意,有n只袋鼠,没每只袋鼠有个袋子,大小为si,一个袋鼠可以进入另外一个袋鼠的袋子里面,当且仅当另一个袋鼠的袋子是他的二倍或二倍一上,然后中国袋鼠就是不可见的,不能出现多个袋鼠嵌套的情况.让你求最少 ...
 - Codeforces Round #219 (Div. 2) D. Counting Rectangles is Fun 四维前缀和
		
D. Counting Rectangles is Fun time limit per test 4 seconds memory limit per test 256 megabytes inpu ...
 - Counting Rectangles
		
Counting Rectangles Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1043 Accepted: 546 De ...
 - Project Euler 85 :Counting rectangles  数长方形
		
Counting rectangles By counting carefully it can be seen that a rectangular grid measuring 3 by 2 co ...
 - UVA - 10574 Counting Rectangles
		
Description Problem H Counting Rectangles Input: Standard Input Output:Standard Output Time Limit: 3 ...
 - UVA 10574 - Counting Rectangles(枚举+计数)
		
10574 - Counting Rectangles 题目链接 题意:给定一些点,求可以成几个边平行于坐标轴的矩形 思路:先把点按x排序,再按y排序.然后用O(n^2)的方法找出每条垂直x轴的边,保 ...
 - Codeforces 954H Path Counting 【DP计数】*
		
Codeforces 954H Path Counting LINK 题目大意:给你一棵n层的树,第i层的每个节点有a[i]个儿子节点,然后问你树上的简单路径中长度在1~n*2-2之间的每个有多少条 ...
 - codeforces 372 Complete the Word(双指针)
		
codeforces 372 Complete the Word(双指针) 题链 题意:给出一个字符串,其中'?'代表这个字符是可变的,要求一个连续的26位长的串,其中每个字母都只出现一次 #incl ...
 - Codeforces 372B Counting Rectangles is Fun:dp套dp
		
题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...
 
随机推荐
- NYOJ   202   红黑树     (二叉树)
			
题目链接 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树... 当然,这个是我说的... <算法导论>上可不是这么说的: 如果一个二叉查找树满足下面的红黑 ...
 - E - Travel Cards CodeForces - 847K (思维)
			
题目链接:https://cn.vjudge.net/contest/272855#problem/E 题目大意:给你n,a,b,k,f.n代表有n次旅行计划,然后a代表一次单程旅行的车费,b代表从下 ...
 - F - Debate CodeForces - 1070F  思维
			
题目链接:https://vjudge.net/problem/CodeForces-1070F 具体思路:首先把所有的00放进去,然后对于10 和01 的取两个数目最小值t,排完序后将前t个加起来, ...
 - 怎么让IIS7第一次访问相应速度加快
			
当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP.NET网页第一个Req ...
 - 深入理解Spring系列之十二:@Transactional是如何工作的
			
转载 https://mp.weixin.qq.com/s/ZwhkUQF1Nun9pNrFI-3a6w 首先从说起.配置了,就必定有对应的标签解析器类,查看NamespaceHandler接口的实现 ...
 - layui结合mybatis的pagehelper插件的分页通用的方法
			
总体思路: 1.前台查询的时候将当前页和页大小传到后台 2.后台将当前页,页大小以及数据与数据总数返回前台,前台显示完表格完数据之后显示分页插件. 前台页面: 准备查询条件的表单,与数据表格,分页di ...
 - spring中的任务调度Quartz
			
Spring 整合 Quartz 任务调度 主要有两种方式. Quartz的官网:http://www.quartz-scheduler.org/ 这两种只是一些配置文件简单配置就OK了,但是根本无法 ...
 - springBoot单元测试-模拟MVC测试
			
1)模拟mvc测试,和基础测试是一样的, 都需要在pom文件中引入junit的支持. 略 2)编写测试类 Application1TestMVC 在类头上除啦加入之前的@RunWith(SpringR ...
 - Groovy 与 DSL
			
一:DSL 概念 指的是用于一个特定领域的语言(功能领域.业务领域).在这个给出的概念中有 3个重点: 只用于一个特定领域,而非所有通用领域,比如 Java / C++就是用于通用领域,而不可被称为 ...
 - php 面试指南
			
https://xianyunyh.gitbooks.io/php-interview/