http://acm.hdu.edu.cn/showproblem.php?pid=5749

思路:

bestcoder 84

贡献:所有可能的子矩阵的面积和

1 //len1:子矩阵所有长的和
2 for(int i=1;i<=L;i++){
3     for(int j=1;j<=R;j++){
4         len1+=i+j-1;//-1是因为1*1单元格也是鞍点
5     }
6 }

 1 // #pragma comment(linker, "/STACK:102c000000,102c000000")
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <sstream>
 6 #include <string>
 7 #include <algorithm>
 8 #include <list>
 9 #include <map>
10 #include <vector>
11 #include <queue>
12 #include <stack>
13 #include <cmath>
14 #include <cstdlib>
15 #include <conio.h>
16 using namespace std;
17 #define clc(a,b) memset(a,b,sizeof(a))
18 #define inf 0x3f3f3f3f
19 #define lson l,mid,rt<<1
20 #define rson mid+1,r,rt<<1|1
21 const int N = 1010;
22 const int M = 1e6+10;
23 const long long MOD = 1LL<<32;
24 #define LL long long
25 #define LB long double
26 #define mi() (l+r)>>1
27 double const pi = acos(-1);
28 const double eps = 1e-8;
29 void fre() {
30     freopen("in.txt","r",stdin);
31 }
32
33 int a[N][N];
34 int l[N][N],r[N][N],u[N][N],d[N][N];
35 stack<int>st;
36 LL ans;
37 int n,m;
38 void calc(){
39     for(int i=1;i<=n;i++)
40         for(int j=1;j<=m;j++){
41             int L=j-l[i][j],R=r[i][j]-j,U=i-u[i][j],D=d[i][j]-i;
42             LL tem=(LL)L*R*U*D*(L+R)*(U+D)/4;
43             ans=(ans+(LL)a[i][j]*tem)%MOD;
44         }
45     printf("%I64d\n",ans);
46 }
47
48 int main(){
49     int T;
50     scanf("%d",&T);
51     while(T--){
52         scanf("%d%d",&n,&m);
53         for(int i=1;i<=n;i++){
54             for(int j=1;j<=m;j++){
55                 scanf("%d",&a[i][j]);
56             }
57         }
58         while(!st.empty()) st.pop();
59         for(int i=1;i<=n;i++){
60             a[i][0]=a[i][m+1]=-inf;
61             while(!st.empty()) st.pop();st.push(0);
62             for(int j=1;j<=m;j++){
63                 while(!st.empty()&&a[i][st.top()]>a[i][j]) st.pop();
64                 l[i][j]=st.top();
65                 st.push(j);
66             }
67             while(!st.empty()) st.pop();st.push(m+1);
68             for(int j=m;j>=1;j--){
69                while(!st.empty()&&a[i][st.top()]>a[i][j]) st.pop();
70                r[i][j]=st.top();
71                st.push(j);
72             }
73         }
74         for(int j=1;j<=m;j++){
75             a[0][j]=a[n+1][j]=inf;
76             while(!st.empty()) st.pop();st.push(0);
77             for(int i=1;i<=n;i++){
78                 while(!st.empty()&&a[st.top()][j]<a[i][j]) st.pop();
79                 u[i][j]=st.top();
80                 st.push(i);
81             }
82             while(!st.empty()) st.pop();st.push(n+1);
83             for(int i=n;i>=1;i--){
84                 while(!st.empty()&&a[st.top()][j]<a[i][j]) st.pop();
85                 d[i][j]=st.top();
86                 st.push(i);
87             }
88         }
89         ans=0;
90         calc();
91     }
92     return 0;
93 }

转载于:https://www.cnblogs.com/ITUPC/p/5716115.html

HDU5479 Colmerauer 单调栈+暴力优化相关推荐

  1. 单调队列,单调栈总结

    最近几天接触了单调队列,还接触了单调栈,就总结一下. 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减.当要入栈或者入队的时候,要和栈头或者队尾进行比 ...

  2. 牛客小白月赛13-H(单调栈+树状数组)

    题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...

  3. leetcode 739. 每日温度 单调栈解法和暴力法及其优化 c代码

    如题: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高, 请在该位置用 0 来代替.例如,给定一个列表 temperature ...

  4. [TJOI2011] 书架(线段数优化dp + 单调栈)

    problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移. 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值. 然后枚举最后一组,即 i ...

  5. [Leedcode][JAVA][第739题][每日温度][暴力][单调栈]

    [问题描述][中等] 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替.例如,给定一个列表 temper ...

  6. BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分

    传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...

  7. CF1131 G. Most Dangerous Shark (单调栈优化dp)

    文章目录 problem solution code problem solution dpi:dp_i:dpi​: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili​,ri​分别 ...

  8. CF1131 G. Most Dangerous Shark(DP+单调栈优化)

    文章目录 problem solution code problem solution dpi:dp_i:dpi​: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili​,ri​分别 ...

  9. leetcode 42. 接雨水 思考分析(暴力、动态规划、双指针、单调栈)

    目录 题目 思路 暴力法 动态规划 双指针法 单调栈 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 输入:height = [0,1,0,2 ...

  10. [Leedcode][JAVA][第84题][柱状图中最大的矩形][暴力][单调栈]

    [问题描述][困难] 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积.以上是柱状图的示例,其中每个柱子的宽度为 1 ...

最新文章

  1. LeetCode简单题之买卖股票的最‭佳时机
  2. 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别
  3. UVA_11922 Permutation Transformer 【splay树】
  4. 自己的缺省(sheng)源
  5. 【温故而知新-Javascript】使用 Ajax(续)
  6. Linux内核的裁剪和移植
  7. ubunbtu下基于c++实现MQTT客户端通信
  8. 【总目录】机器学习原理剖析、开源实战项目、全套学习指南(50篇合集)
  9. matlab imrotate中心,MATLAB imrotate函数的用法
  10. 就在昨天,张一鸣宣布卸任字节跳动CEO!
  11. 网站文章被采集?尝试使用这几种方法进行最大防护
  12. 数据报表开发技巧:自动为数据报表添加【小计】、【总计】行
  13. 第十二届“中国软件杯”大赛:A10-基于机器学习的分布式系统故障诊断系统——baseline(二)
  14. linux网卡的配置文件是双引号,Linux修改网卡ens33为eth0以及centos7下修改动态IP为静态IP地址...
  15. 电脑断电后,突然无线有线网卡无法使用
  16. python语言的特点-Python语言的特点有哪些?
  17. 男人应该多吃的10种健康食物
  18. 假面舞会[NOI2008]
  19. linux中convert用法
  20. esp8266-01s控制继电器开关

热门文章

  1. Java程序发生异常就挂了吗?
  2. 从陪练到赢家:人机博弈的六十年
  3. 用Nuget图形化界面打包类库(一)
  4. 从0开始学习C#第二天
  5. sysctl.conf 参数相关注解
  6. 详解BSCI实验一、配置EIGRP 验证,汇总
  7. C#如何控制Windows关机
  8. C++复合类型-引用变量
  9. oracle 回表是什么,ORACLE回表
  10. [2018.10.18 T3] 玩串