题意

给定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. asp.net DataTables

    无聊做一个,但是还是留下一些疑惑: 在控件中加入例如编辑,删除之类的按钮,而不是以行内元素呈现. 真实分页的实现方法. 要是有知道的朋友,希望指点一二. 下面只实现的功能: 隐藏列 冻结列 分页 列排 ...

  2. Codeforces 982 C. Cut 'em all!(dfs)

    解题思路: 代码中有详细注解,以任意一点为根,dfs遍历这棵树. 每一个节点可能有好几个子树,计算每棵子树含有的节点数,再+1即为这整棵树的节点. 判断子树是否能切断与根之间的联系,如果子树含有偶数个 ...

  3. Java事件处理机制2

    实现一个小程序,怎样让小球受到键盘的控制,上下左右移动,如图: public class Demo3 extends JFrame{ MyPanel mp=null; public static vo ...

  4. Jquery 设置class 和 div CSS

    Jquery 设置class 和 div CSS 1 Jquery 根据标签内容获取标签div,从而修改该div CLASS //追加 $('label:contains("labelcon ...

  5. 【原创】关于class.forname

    连接数据库前都要调用一下class.forname("driverName");然后使用DriverMnager获取连接,这是为什么呢? 首先jdbc标准要求,每个驱动必须向Dri ...

  6. 好久不见我又回来了cnblogs

    最近一直没时间写博客.... 最近工作中遇到的问题,当时花费了一定功夫才解决. 当再次遇到,同样问题的时候,我知道自己能够解决的,但是却同样,要走原来的弯路解决他. 说到底还时确实总结啊.大概是没时间 ...

  7. 复制excel表,往excel表中写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...

  8. axios 使用post方式传递参数,后端接受不到问题

    一.URLSearchParams var params = new URLSearchParams(); params.append('key1', 'value1'); //你要传给后台的参数值 ...

  9. Java默认方法

    示例1 interface InterfaceA { default void say() { System.out.println("InterfaceA"); } } publ ...

  10. redhat 7 cenos 7 网络配置文件

    Cenos 7 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=eth0 ...