题目链接 洛谷

COGS.24

对于大的矩阵可以枚举;对于小的矩阵,需要在满足条件的区域求一个矩形和的最小值

预处理S2[i][j]表示以(i,j)为右下角的C\(*\)D的矩阵和,

然后对于求矩形区域的最小值,可以先将每行看做一个数列,对于每个点y,得到一个[y-(B-3),y]的最小值

处理完行后得到Minr[][],对每列的进行同样的操作,就可以得到Min[x][y]表示([x-A+3,x],[y-B+3,y])的最小矩形和

但是注意单调队列处理的是S2,S2表示的是C\(*\)D的和,not a single point!所以端点应该是([x-A+C+1],[y-B+D+1])

原先做过这样的套路题,还是费了近一下午==不行效率太低了

#include <cstdio>
#include <cctype>
//#define gc() getchar()
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
const int N=1005,MAXIN=6e5; int n,m,A,B,C,D,S[N][N],S1[N][N],S2[N][N],q[N],Minr[N][N];
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
//void Debug(int a[N][N],int s,int s2)
//{
// puts("Debug");
// for(int i=s; i<=n; ++i,putchar('\n'))
// for(int j=s2; j<=m; ++j) printf("%d ",a[i][j]);
// putchar('\n');
//}
void Pre()
{
for(int i=C+1; i<n; ++i)//第1~C,n行用不到
{
int h=1,t=0;
for(int j=D+1; j<m; ++j)
{
while(h<=t && S2[i][q[t]]>=S2[i][j]) --t;
q[++t]=j;
if(q[h]<=j-B+D+1) ++h;
Minr[i][j]=S2[i][q[h]];
}
}
// Debug(S,1,1);
// Debug(S1,A,B);
// Debug(S2,C,D);
// Debug(Minr,2,2);
}
void Solve()
{
int res=0;
for(int j=D+1; j<m; ++j)//枚举小矩形可放范围,行+1列+1即大矩形的位置
{
int h=1,t=0;
for(int i=C+1; i<n; ++i)
{
while(h<=t && Minr[q[t]][j]>=Minr[i][j]) --t;
q[++t]=i;
if(q[h]<=i-A+C+1) ++h;
if(res<S1[i+1][j+1]-Minr[q[h]][j]) res=S1[i+1][j+1]-Minr[q[h]][j];
}
}
printf("%d",res);
} int main()
{
n=read(),m=read(),A=read(),B=read(),C=read(),D=read();
if(n<=2||m<=2) {putchar('0'); return 0;}
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
S[i][j]=read()+S[i][j-1]+S[i-1][j]-S[i-1][j-1];
for(int i=A; i<=n; ++i)
for(int j=B; j<=m; ++j)
S1[i][j]=S[i][j]-S[i][j-B]-S[i-A][j]+S[i-A][j-B];
for(int i=C+1; i<=n; ++i)
for(int j=D+1; j<=m; ++j)
S2[i][j]=S[i][j]-S[i][j-D]-S[i-C][j]+S[i-C][j-D];
Pre(), Solve(); return 0;
}

洛谷.2219.[HAOI2007]修筑绿化带(单调队列)的更多相关文章

  1. luogu 2219[HAOI2007]修筑绿化带 单调队列

    Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...

  2. 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)

    传送门 啧……明明以前做到过这种类型的题结果全忘了…… 这种矩阵的,一般都是先枚举行,然后对列进行一遍单调队列,搞出右下角在每一行中合法位置时的最小权值 再枚举列,对行做一遍单调队列,用之前搞出来的最 ...

  3. 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)

    Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮 ...

  4. 【洛谷P1886】滑动窗口——单调队列

    没想到啊没想到,时隔两个月,我单调队列又懵了…… 调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!) 考前就不推新东西了,好好写写那些学过的东西 题目点这里(我就不粘了自己点一下 ...

  5. 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)

    洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...

  6. 洛谷P2698 花盆Flowerpot【单调队列】

    题目描述 Farmer John has been having trouble making his plants grow, and needs your help to water them p ...

  7. 2018.09.26洛谷P3957 跳房子(二分+单调队列优化dp)

    传送门 表示去年考普及组的时候失了智,现在看来并不是很难啊. 直接二分答案然后单调队列优化dp检验就行了. 注意入队和出队的条件. 代码: #include<bits/stdc++.h> ...

  8. 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]

    题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...

  9. 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP

    题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...

随机推荐

  1. 【vim】实时加密文本 ggVGg?

    如果你不想让别人看懂你的屏幕上的内容,你可以使用一个内置的选项,通过下面的命令使用 ROT13 来对文本进行编码: ggVGg? gg 把光标移动到 Vim 缓冲区的第一行, V 进入可视模式, G ...

  2. 【vim】保存文件并退出 :w=:wq

    这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的.但如果未被修改,使用 :x 不会更改文件的修改时间,而使用 :wq 会改变文件的修改时间.

  3. grep用法【转】

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  4. php- post表单 input name属性的问题

    <input type='text'  style='width: 99px' name='deptNo'></td> name为字符串的时候传递的是单个字符串 <inp ...

  5. vue学习生命周期(created和mounted区别)

    created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图(例如ajax请求列表). mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom ...

  6. dns轮询

    负载均衡最开始一步,利用它实现负载均衡集群的定位

  7. elasticsearch5.0.1安装 marvel 插件

    elasticsearch5.0.1安装 marvel 插件 1.在elasticsearch上安装x-pach插件 在elasticsearch的根目录(每个节点),运行 bin/elasticse ...

  8. 06-jQuery的文档操作(重点)

    之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的文档操作的API提供了便利的方法供我们操 ...

  9. Python-html css 盒模型

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>ht ...

  10. 玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题

    raspberry pi买回来玩了一段时间,现在就记录一下入门遇到的一些问题吧. 首先是烧写镜像,和安装电脑系统是一样的道理. 先要有一个制作一个U启动盘.先将SD卡格式化,再用Win32DiskIm ...