题意:给出一个n*m的矩形。询问矩形上所有的a*b的小矩形的最小值之和。

解法:我们先对每一行用单调栈维护c[i][j]代表从原数组的mp[i][j]到mp[i][j+b-1]的最小值(具体维护方法是单调队列维护滑动窗口就不细讲了)。然后我们得到一个新数组c[i][j],然后用几乎同样的办法维护每一列d[i][j]代表从数组c[i][j]到c[i+a-1][j]的最小值。仔细思考此时我们得到的d[i][j]是什么?此时我们得到的d[i][j]就是在原数组mp[i][j]中以(i,j)为左上角的长为a宽为b的矩形的最小值。(如果这里不理解就是没理解c数组怎么来的,然后d数组怎么来的)。那么我们就把答案就起来就可以了。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=+;
int n,m,a,b,g,x,y,z;
int r[N*N],q[N],mp[N][N],c[N][N],d[N][N]; int main()
{
cin>>n>>m>>a>>b;
cin>>g>>x>>y>>z;
r[]=g;
for (int i=;i<=n*m;i++) r[i]=((LL)r[i-]*x+y)%z;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
mp[i][j]=r[(i-)*m+j-]; for (int i=;i<=n;i++) {
int h=,t=;
for (int j=;j<=b;j++) {
while (h<=t && mp[i][j]<mp[i][q[t]]) t--;
q[++t]=j;
}
for (int j=;j<=m;j++) {
while (h<=t && j>q[h]) h++;
if (h<=t) c[i][j]=mp[i][q[h]];
if (j+b<=m) {
while (h<=t && mp[i][j+b]<mp[i][q[t]]) t--;
q[++t]=j+b;
}
}
}
for (int j=;j<=m;j++) {
int h=,t=;
for (int i=;i<=a;i++) {
while (h<=t && c[i][j]<c[q[t]][j]) t--;
q[++t]=i;
}
for (int i=;i<=n;i++) {
while (h<=t && i>q[h]) h++;
if (h<=t) d[i][j]=c[q[h]][j];
if (i+a<=n) {
while (h<=t && c[i+a][j]<c[q[t]][j]) t--;
q[++t]=i+a;
}
}
} LL ans=;
for (int i=;i<=n-a+;i++) for (int j=;j<=m-b+;j++) ans+=d[i][j];
cout<<ans<<endl;
return ;
}

Codeforces 1195E. OpenStreetMap (单调队列)的更多相关文章

  1. Codeforces - 1195E - OpenStreetMap - 单调队列

    https://codeforc.es/contest/1195/problem/E 一个能运行但是会T的版本,因为本质上还是\(O(nmab)\)的算法.每次\(O(ab)\)初始化矩阵中的可能有用 ...

  2. Codeforces 1195E OpenStreetMap 单调队列套单调队列

    题意:给你一个n * m的矩阵,问所有的a * b的子矩阵的最小的元素的和是多少.题目给出了矩阵中的数的数据生成器. 思路:如果这个问题是1维的,即求所有区间的最小元素的和,用单调队列O(n)就可以做 ...

  3. CodeForces 602D 【单调队列】【简单数学】

    题意: 给你n个数,m次询问,每次询问给l和r代表l和r中间所有子区间中特征值的和. 特征值的定义是在这个区间中找i和j使得|tmp[i]-tmp[j]|/|j-i|最大. 思路: 首先是特征值的定义 ...

  4. Codeforces Round #574 (Div. 2) E. OpenStreetMap 【单调队列】

    一.题目 OpenStreetMap 二.分析 对于二维空间找区间最小值,那么一维的很多好用的都无法用了,这里可以用单调队列进行查找. 先固定一个坐标,然后进行一维的单调队列操作,维护一个区间长度为$ ...

  5. CodeForces 164 B. Ancient Berland Hieroglyphs 单调队列

    B. Ancient Berland Hieroglyphs 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co ...

  6. Codeforces Round #189 (Div. 1) B. Psychos in a Line 单调队列

    B. Psychos in a Line Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/p ...

  7. Codeforces Beta Round #6 (Div. 2 Only) 单调队列

    题目链接: http://codeforces.com/contest/6/problem/E E. Exposition time limit per test 1.5 secondsmemory ...

  8. Codeforces 445A Boredom(DP+单调队列优化)

    题目链接:http://codeforces.com/problemset/problem/455/A 题目大意:有n个数,每次可以选择删除一个值为x的数,然后值为x-1,x+1的数也都会被删除,你可 ...

  9. Codeforces 1029B. Creating the Contest 动态规划O(nlogn)解法 及 单调队列O(n)解法

    题目链接:http://codeforces.com/problemset/problem/1029/B 题目大意:从数组a中选出一些数组成数组b,要求 b[i+1]<=b[i]*2 . 一开始 ...

随机推荐

  1. 不在同一个解决方案下的exe去调试dll,采用附加到进程:

    先把dll的项目生成一下,把得到的pdb,dll文件复制到exe目录下,然后直接双击运行exe(不是通过vs启动),再接着在dll的项目中”调试”->”附加到进程”,选择刚才运行的exe. 注意 ...

  2. hdu4336 Card Collector MinMax 容斥

    题目传送门 https://vjudge.net/problem/HDU-4336 http://acm.hdu.edu.cn/showproblem.php?pid=4336 题解 minmax 容 ...

  3. phpstorm git配置

    一. 安装git apt-get install git 二. 选择file->setting->Version Control->git 在此输入框输入git的执行路径 三.配置g ...

  4. 线程池(ThreadPool)创建

    线程池创建方式jdk1.5 Java通过Executors(jdk1.5并发包)提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活 ...

  5. 1.WCF学习--创建简单的WCF服务

    一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...

  6. Oracle RAC常用命令

    Oracle Clusterware的命令集可以分为以下4种,其中用的最多的是crsctl和srvctl:节点层:osnodes olsnodes -n -i -s olsnodes -l -p 网络 ...

  7. Vue学习笔记-组件通信-子传父(自定义事件)

    props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...

  8. shell脚本特殊变量与变量子串相关知识

    一.shell脚本特殊变量 1.shell中常用特殊位置变量说明: $0 获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,那么就包含了脚本路径 $n 获取当前执行的shell脚本的第n个 ...

  9. spring-boot整合Mybatis案例(注解方式)

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  10. 【HDOJ6611】K Subsequence(费用流)

    题意:给定一个长为n的正整数序列,要求从中取出至多k个不下降序列,使得它们的和最大,求这个和 n<=2e3,k<=10,a[i]<=1e5 思路:极其考验模板,反正我的spfa和zk ...