题意

给定k,n,和n*n的矩阵,求一个子矩形满足权值和在[k,2k]之间

,

题解

这里用到了极大化矩阵的思想。推荐论文《浅谈用极大化思想解决最大子矩阵问题》Orz

如果有一个元素在[k,2k]之间。直接输出就好。

否则。把所有大于2k的元素作为障碍点。

求每一个最大化矩阵。(用单调队列)

如果这个矩阵权值和大于等于k

那么这个矩阵一定有一个子矩阵满足条件。这个结论可以证明。

假设这个矩阵权值和小于等于2k则直接输出这个矩阵。

否则这个矩阵权值和一定大于2k

假设这个矩阵去掉第一行后权值和大于k,则去掉第一行后的矩阵继续操作。

假设权值和小于等于k则矩阵的第一行权值和一定大于k,所以一个一个去除这一行的元素判断即可。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const long long N=;
long long n,k,a[N][N],book[N][N],sum[N][N],sum1[N][N],top,stack[N],r[N],l[N];
void work(long long x1,long long y1,long long x2,long long y2){
if(sum1[x2][y2]-sum1[x2][y1-]-sum1[x1-][y2]+sum[x1-][y1-]<=*k){
cout<<y1<<" "<<x1<<" "<<y2<<" "<<x2;
return ;
}
while(sum1[x2-][y2]-sum1[x2-][y1-]-sum1[x1-][y2]+sum1[x1-][y1-]>=k){
x2--;
}
while(sum1[x2][y2]-sum1[x2][y1-]-sum1[x2-][y2]+sum1[x2-][y1-]>*k)y1++;
cout<<y1<<" "<<x2<<" "<<y2<<" "<<x2;
}
int main(){
scanf("%lld%lld",&k,&n);
for(long long i=;i<=n;i++)
for(long long j=;j<=n;j++){
scanf("%lld",&a[i][j]);
if(a[i][j]>=k&&a[i][j]<=*k){
cout<<j<<" "<<i<<" "<<j<<" "<<i;
return ;
}
if(a[i][j]>*k)book[i][j]=;
if(book[i][j])sum[i][j]=;
else sum[i][j]=sum[i-][j]+;
sum1[i][j]=sum1[i-][j]+sum1[i][j-]-sum1[i-][j-]+a[i][j];
}
for(long long i=;i<=n;i++){
top=;
for(long long j=;j<=n;j++){
while(sum[i][j]<sum[i][stack[top]]){
r[stack[top]]=j-;
top--;
}
stack[++top]=j;
}
while(top){
r[stack[top--]]=n;
}
top=;
for(long long j=n;j>=;j--){
while(sum[i][j]<sum[i][stack[top]]){
l[stack[top]]=j+;
top--;
}
stack[++top]=j;
}
while(top){
l[stack[top--]]=;
}
for(long long j=;j<=n;j++){
if(sum1[i][r[j]]-sum1[i][l[j]-]-sum1[i-sum[i][j]][r[j]]+sum1[i-sum[i][j]][l[j]-]>=k){
work(i-sum[i][j]+,l[j],i,r[j]);
return ;
}
}
}
printf("NIE");
return ;
}

[POI2008]KUP-Plot purchase(单调队列)的更多相关文章

  1. bzoj 1122 [POI2008]账本BBB 模拟贪心,单调队列

    [POI2008]账本BBB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 524  Solved: 251[Submit][Status][Disc ...

  2. [BZOJ1122][POI2008]账本BBB 单调队列+后缀和

    Description 一个长度为n的记账单,+表示存¥1,-表示取¥1.现在发现记账单有问题.一开始本来已经存了¥p,并且知道最后账户上还有¥q.你要把记账单修改正确,使得 1:账户永远不会出现负数 ...

  3. BZOJ 1122 POI2008 账本BBB 单调队列

    题目大意:给定一个由+1和−1构成的长度为n的序列,提供两种操作: 1.将某一位取反,花销为x 2.将最后一位移动到前一位.花销为y 要求终于p+sumn=q.且p+sumi≥0(1≤i≤n),求最小 ...

  4. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  5. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  6. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  7. BZOJ 1047 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...

  8. 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列

    第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...

  9. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

随机推荐

  1. POJ 2114 点分治

    思路: 点分治 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> u ...

  2. jQuery EasyUI 右键菜单--关闭标签/选项卡

    目录结构: noContextMenu.js 文件内容如下: $(function(){ //屏蔽右键菜单 $(document).bind("contextmenu", func ...

  3. vmware workstation中的NAT配置

    宿主机:win10: IP:192.168.1.101 GW:192.168.1.1 以太网2(VMNET8) IP:192.168.100.1 GW:nonevmware中的虚拟网络设置(NAT): ...

  4. pandaboy玩pandas

    基于python的三方库pandas的excel表二次开发 import numpy as np import pandas as pd import time from pandas import ...

  5. vue下面的scoped

    scope这个属性限制了下面的css代码的作用域只在当前组件中生效,此时直接去更改elementui的属性,浏览器搜索不到这个元素的最外层的父级,于是这个东西不会生效

  6. iOS开发——heightForHeaderInSection设置高度无效

    iOS11之后,tableView设置section高度失效,解决方法有两种: 1.iOS11默认开启Self-Sizing,关闭Self-Sizing即可.在初始化tableview的地方加上下面的 ...

  7. angular7升级到angular8

    1.首先我们对:angular的命令的安装 ng install -g @angular/cli的安装则会升级到最新的版本,并且再次创建项目的时候,我们就能够使用ng version查看到已经是最新的 ...

  8. 紫书 习题 8-17 UVa 11536 (滑动窗口)

    这道题说连续子序列, 马上就想到滑动窗口. 注意窗口里面的元素中小于等于k的才是有效元素.记录窗口里面有效元素的个数, 满足了之后开始 缩短窗口, 如果左端点不是有效元素或者即使窗口中存在这个元素的个 ...

  9. c++_benchMark_vector_list_deque

    title: c++_benchMark_vector_list_deque date: 2015-08-01 22:32:39 作者:titer1 + ZhangYu 出处:www.drysalte ...

  10. GBK编码具体解析(附GBK码位分布图)

    1.GBK码位分布图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA= ...