题意

给定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. Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转

    原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到“每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互相协作(通 ...

  2. springMVC接受参数总结

    springMVC接受参数分类及使用对应注解才能正确接受到参数,否则报400或者接受的参数值为null: 1.接受单个参数 @RequestParam 不需要转json串 2.接受一个实体 @Requ ...

  3. Spring mvc <mvc:resources ***/> 作用

    <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd --> 如在页面需要导入其它 ...

  4. Page Layout里的javascript (jquery)不执行

    在page layout 中通过 _spBodyOnLoadFunctionNames.push("js 方法名") 的方式实现. 但切记,代码要放到 PlaceHolderMai ...

  5. 001.ActiveMQ概述

    1. 概念 ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现的消息中间件(Message Oriented Middleware ...

  6. UVa 10943 How do you add?【递推】

    题意:给出n,k,问恰好有k个不超过n的数的和为n的方案数有多少 可以隔板法来做 现在有n个小球放到k个盒子里面,盒子可以为空 那么就是n-k+1个缝隙,放上k-1个隔板(k-1个隔板就分成了k份) ...

  7. win10关闭更新

    计算机--管理: 找到windows update 服务关闭:

  8. First-class citizen

    In programming language design, a first-class citizen (also type, object, entity, or value) in a giv ...

  9. Python3基础笔记---线程与进程

    参考博客:Py西游攻关之多线程(threading模块) 一.并发与并行的区别 并发:交替做不同事的能力并行:同时做不同事的能力 行话解释:并发:不同代码块交替执行的性能并行:不同代码块同时执行的性能 ...

  10. camke 参数

    cmake -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \   -DMYSQL_DATADIR=/application/mysql-5.5.32 ...