题意:给出一个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. activemq---点对点/发布订阅模式简单代码示例

    activemq 消息模式流程: ConnnectionFactory --> Connection --> Session --> Message ---ConnectionFac ...

  2. vue 字符串长度控制显示的字数超出显示省略号

    1. html <p class="index__Feature-list-itemlist-title newline"> {{item.name| ellipsis ...

  3. HTML5 canvas绘制文本

    demo.html <!DOCTYPE html> <html lang="zh"> <head> <meta charset=" ...

  4. Cesium标点

    let startPoint = this.viewer.entities.add( //viewer.entities.add 添加实体的方法 { name: '测量距离', //这个属性跟页面显示 ...

  5. python request(HttpRequest对象)请求的属性、方法笔记

    1.属性 path:表示提交请求页面完整地址的字符串,不包括域名,如"/music/bands/the_beatles/". method:表示提交请求使用的HTTP方法.(GET ...

  6. favicon.ico设置

    <link rel="shortcut icon" href="media/image/favicon.ico" />

  7. mybatis框架之动态代理

    坦白讲,动态代理在日常工作中真没怎么用过,也少见别人用过,网上见过不少示例,但总觉与装饰模式差别不大,都是对功能的增强,什么前置后置,其实也就那么回事,至于面试中经常被问的mybatis框架mappe ...

  8. .Net Core 使用Redis进行数据缓存

    1.运行环境 开发工具:Visual Studio 2017 JDK版本:.NET Core 2.0 项目管理工具:nuget 2.GITHUB地址 https://github.com/nbfujx ...

  9. 【LeetCode 85】最大矩形

    题目链接 [题解] 把所有的"1"矩形分成m类. 第j类的矩形.他的右边界跟第j列紧靠. 那么. 我们设f[i][j]表示(i,j)这个点往左最长能延伸多少个数目的"1& ...

  10. buuctf | [强网杯 2019]随便注

    1' and '0,1' and '1  : 单引号闭合 1' order by 3--+ : 猜字段 1' union select 1,database()# :开始注入,发现正则过滤 1' an ...