xsy子矩形
- 考虑一种解题方法,枚举上下边界L,R, 然后二分答案T,我们要判断的是否存在
\]
- 也就是
\]
- 维护前缀最小值即可
- 然后这样是三次方的, 我们考虑random_shuffle一下枚举的序列, 然后查询的时候就先看一下当前的ans + eps是否可行, 不可行的话就不进行二分直接退出
- 这样期望是会进行lnn次的二分, 就赢了
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define M 515
#define ll long long
#define mmp make_pair
using namespace std;
int read() {
int nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
const double eps = 1e-10, inf = 5e13;
double ans = -1e9;
ll sum[M][M], n, tp, ver[M], xl, xr, yl, yr;
pair<int, int> note[M * M];
ll get(int xa, int ya, int xb, int yb) {
return sum[xb][yb] - sum[xa - 1][yb] - sum[xb][ya - 1] + sum[xa - 1][ya - 1];
}
bool check(double T, int len, int l, int r) {
double minn = 0, pl = 0;
double up = T * 2 * len;
for(int i = 1; i <= n; i++) {
double ver2 = ver[i] - T * 2 * i;
if(ver2 - minn >= up) {
if(T > ans) {
ans = T;
xl = l, yl = pl + 1, xr = r, yr = i;
}
return true;
}
if(ver2 < minn) minn = ver2, pl = i;
}
return false;
}
int main() {
//freopen("rectangle3.in", "r", stdin);
n = read();
for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + read();
for(int i = 1; i <= n; i++) for(int j = i; j <= n; j++) note[++tp] = mmp(i, j);
for(int i = 1; i <= tp; i++) {
int x = 1ll * rand() * rand() % i + 1;
swap(note[x], note[i]);
}
for(int i = 1; i <= tp; i++) {
int l = note[i].first, r = note[i].second;
for(int j = 1; j <= n; j++) ver[j] = get(l, 1, r, j);
if(!check(ans + eps, r - l + 1, l, r)) continue;
double L = ans, R = inf;
for(int j = 1; j <= 100; j++) {
double mid = (L + R) / 2.0;
if(!check(mid, r - l + 1, l, r)) R = mid;
else L = mid;
}
}
// cerr<< note[tp].first << " " << note[tp].second << "\n";
printf("%.10lf\n", ans);
cout << xl << " " << yl << "\n" << xr << " " << yr << "\n";
return 0;
}
xsy子矩形的更多相关文章
- LeetCode子矩形查询
LeetCode 子矩形查询 题目描述 请你实现一个类SubrectangleQueries,它的构造函数的参数是一个rows * cols的矩形(这里用整数矩阵表示),并支持以下两种操作: upda ...
- PKU 1050-To The Max(找矩形内元素最大和)
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...
- Vijos1055 奶牛浴场(极大化思想求最大子矩形)
思路详见 王知昆<浅谈用极大化思想解决最大子矩形问题> 写得很详细(感谢~....) 因为不太会用递推,所以用了第一种方法,时间复杂度是O(n^2),n为枚举的点数,对付这题绰绰有余 思路 ...
- [LeetCode] Number Of Corner Rectangles 边角矩形的数量
Given a grid where each entry is only 0 or 1, find the number of corner rectangles. A corner rectang ...
- XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- bzoj 1127 KUP —— 最大子矩形+答案构造
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 首先,把权值 > 2*k 的点作为“坏点”,然后在图中用悬线法找权值最大的子矩形 ...
- hiho 1476 - 矩形计数 容斥
题目链接 如图所示,在由N行M列个单位正方形组成的矩形中,有K个单位正方形是黑色的,其余单位正方形是白色的. 你能统计出一共有多少个不同的子矩形是完全由白色单位正方形组成的吗? ----------- ...
- P1578 奶牛浴场 有障碍点的最大子矩形
这题咕咕了很久终于写了\(QwQ\) 思路:扫? 提交:2次 错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\). 题解: 显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合 ...
- [LeetCode] Max Sum of Rectangle No Larger Than K 最大矩阵和不超过K
Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...
随机推荐
- iOS 在工程内部创建一个静态库target
当你在开发项目的时候需要把公用的东西打包出来,其他项目方便使用的时候,打包成静态库是你的最优选择,在工程内部开发的时候新建一个target进行静态库的开发可以使你的开发调试更加方便而不是单独新建一个工 ...
- 使用matlab生成用于ROM初始化的coe文件(转)
reference:https://www.cnblogs.com/chensimin1990/p/9759368.html t=0:2*pi/2^12:2*pi; y=0.5*sin(t)+0.5; ...
- msfvenom生成各类Payload命令
Often one of the most useful (and to the beginner underrated) abilities of Metasploit is the msfpayl ...
- elasticsearch 使用快照进行备份
Elasticsearch也提供了备份集群中索引数据的策略——snapshot API.它会备份整个集群的当前状态和数据,并保存到集群中各个节点共享的仓库中.这个备份的进程是增量备份的,在第一次备份的 ...
- 前端-URL到页面显示的全过程
大概有以下几步: DNS解析(浏览器缓存→系统缓存→路由器缓存→ISP DNS缓存→从根域名服务器递归搜索) 建立TCP链接(TCP的三次握手) 浏览器向服务器发送HTTP请求 服务器返回结果给浏览器 ...
- 蓝牙协议分析(3)_BLE协议栈介绍
1. 前言 通过“蓝牙协议分析(2)_协议架构”的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有“似懂非懂.欲说还休”的感觉.有这种感觉太正常了,毕竟蓝牙协议是一个历史悠久又比较庞大的协议, ...
- 读txt文件乱码
/** * 读入TXT文件 */public static List<String> readFile(String pathName) {// 绝对路径或相对路径都可以,写入文件时演示相 ...
- L2-013. 红色警报(并查集)*
L2-013. 红色警报 参考博客 #include <cstdio> #include <algorithm> #include <iostream> #incl ...
- MVVM设计模式加RAC响应式编程
一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...
- 03_安装vsftp服务器
1 安装vsftpd组件 [root@bogon ~]# yum -y install vsftpd 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. 2 添 ...