题目大意


题目大意:

给你一个n×mn\times mn×m的矩阵问你可以截取出多少个不同的矩阵
然后每次会有一个点变成无效点
动态输出每次剩余可挖的矩阵是多少?


解题思路:

首先我们可以这么搞就是对于每个点我们维护它上面最近的无效点,然后暴力枚举包含当前即将变成无效点的矩阵有多少个暴力减掉就行了

具体实现就是
在固定了xxx值之后,我们枚举矩阵左上角和右下角所在的y值就行了

直观上面复杂度是O(n4)O(n^4)O(n4)的但是不是每个点最多被访问nnn次,总的复杂度是O(n3)O(n^3)O(n3)的。


AC code

#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x) {x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {read(first);read(args...);
}
int n, m;
int Down[505][505];
int Up[505][505];
bool vis[505][505];
int main() {IOS;cin >> n >> m;for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j)Down[i][j] = n+1, Up[i][j] = 0;//(i,j)个点上面第一个不能的点,ll ans = (1ll*n*(n+1))/2 * (1ll*m*(m+1))/2;for(int i = 1,x,y; i <= n * m; ++ i) {cin >> x >> y;// 矩阵左端for(int l = y, lupx = 1, ldownx = n; l >= 1 && !vis[x][l]; -- l) {lupx = max(lupx,Up[x][l]+1);ldownx = min(ldownx,Down[x][l]-1);// 矩阵右端for(int r = y, rupx = lupx, rdownx = ldownx; r <= m && !vis[x][r]; ++ r) {rupx = max(rupx,Up[x][r]+1);rdownx = min(rdownx,Down[x][r]-1);ans -= 1ll*(rdownx-x+1) * (x-rupx+1); // 组合贡献}}cout << ans << "\n";// 更新答案for(int j = x - 1; j >= 1 && !vis[j][y]; -- j) Down[j][y] = x;for(int j = x + 1; j <= n && !vis[j][y]; ++ j) Up[j][y] = x;vis[x][y] = 1;}return 0;
}
/*____________________y
|
|
|
|
|
|
|
x
*/

组合计数 ---- 2020 EC final B. Rectangle Flip 2(枚举+组合计数)相关推荐

  1. 2020 EC Final 诸事不顺记

      好像又快过了一星期了...简要记一下好了. day -14   昆明之后的两个星期,第一个星期在搞 GDOI 各项准备工作,第二个星期在肝编译原理大作业.编译原理理论作业.通信原理作业.   就这 ...

  2. java 组合框_Java知多少(88)列表和组合框

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...

  3. 迭代器 组合模式 java_设计模式(九)迭代器模式与组合模式

    迭代器与组合模式 面对不同的问题,自然会用到不同的数据结构,甚至相同的问题也可以用不同的数据结构来实现.比如数组和ArrayList都可以构造一个列表. 但当想获得集合内的元素时,直接的取用就会涉及到 ...

  4. csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法

    csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法 参考文章: (1)csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计 ...

  5. java组合算法应用:购物满减(任意数字组合相加在某个范围内)

    任意价格相加在某个范围内 package com.louisgeek.price;import java.io.BufferedReader; import java.io.IOException; ...

  6. R语言patchwork包将多个可视化结果组合起来、使用plot_annotation函数以及tag_level参数将组合图用大写字母进行顺序编码、为组合图的标签添加自定义前缀信息

    R语言patchwork包将多个可视化结果组合起来.使用plot_annotation函数以及tag_level参数将组合图用大写字母进行顺序编码.为组合图的标签添加自定义前缀信息 目录

  7. R语言patchwork包将多个ggplot2可视化结果组合起来、使用plot_annotation函数以及tag_level参数为组合图添加自定义编码序列(字符向量列表)

    R语言patchwork包将多个ggplot2可视化结果组合起来.使用plot_annotation函数以及tag_level参数为组合图添加自定义编码序列(字符向量列表) 目录

  8. R语言patchwork包将多个ggplot2可视化结果组合起来、使用plot_annotation函数为组合图添加标题信息、使用theme函数自定义组合图中的字体类型(family)

    R语言patchwork包将多个ggplot2可视化结果组合起来.使用plot_annotation函数为组合图添加标题信息.使用theme函数自定义组合图中的字体类型(family) 目录

  9. 基于YOLOv5行人车辆跟踪检测识别计数系统源码+数据集,实现出/入分别计数

    yolov5 deepsort 行人 车辆 跟踪 检测 计数 下载地址:基于YOLOv5行人车辆跟踪检测识别计数系统源码+数据集 实现了 出/入 分别计数. 默认是 南/北 方向检测,若要检测不同位置 ...

最新文章

  1. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  2. python多线程爬虫实例-python多线程爬虫实例讲解
  3. dataset中获取图像的名字_GDAL与OpenCV的图像像素读取格式互相转换
  4. C语言中函数的参数列表为空和void的区别
  5. C语言两班平均成绩,两班工人的平均日产量的标准差系数分别为()。A.甲班11.44%B.甲班8.41%C.乙班12.51%D.乙班9.89% - 作业在线问答...
  6. 李宏毅机器学习(九)Multi-lingual BERT
  7. Linux 进程资源分配,linux 进程管理和内存分配
  8. 通过的镜像源安装python包
  9. 【C++】C++为什么要引入引用这个复合类型?
  10. 软考初级程序员常见类型题,错题个人笔记
  11. mysql 参数set_MySQL--mysqldmp命令参数set-gtid-purged
  12. python小学口算题库生成器_使用Python生成Excel版口算题
  13. 对游戏编程开发的一点思考
  14. java 计算行驶里程,js根据经纬度换算行驶里程
  15. esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2
  16. 天不怕,地不怕,就怕李佳琦的“OMG,太好看了吧!”
  17. Trister‘s Lend告诉你如何选对借贷平台
  18. Java 读取Word文本框中的文本、图片、表格
  19. win7_oracle11g_64位连接32位PLSQL_Develop
  20. Microsoft 桌面程序运行库V5.0

热门文章

  1. 必看干货|成为大数据专业人员必要且重要的7大技能
  2. 轻松学Pytorch – 年龄与性别预测
  3. 用OpenCV和深度学习进行年龄识别
  4. 阿里程序员工作小技巧:理解CPU分支预测,提高代码效率
  5. vue-cli3 第三版安装搭建项目
  6. Scrapy-Splash的介绍、安装以及实例
  7. 找出netstat -tan命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行
  8. Nginx 源码编译安装
  9. 30道linux面试题与答案(21-30)
  10. 利用XRDP远程登陆linux系统