HDU5479 Colmerauer 单调栈+暴力优化
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 单调栈+暴力优化相关推荐
- 单调队列,单调栈总结
最近几天接触了单调队列,还接触了单调栈,就总结一下. 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减.当要入栈或者入队的时候,要和栈头或者队尾进行比 ...
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- leetcode 739. 每日温度 单调栈解法和暴力法及其优化 c代码
如题: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高, 请在该位置用 0 来代替.例如,给定一个列表 temperature ...
- [TJOI2011] 书架(线段数优化dp + 单调栈)
problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移. 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值. 然后枚举最后一组,即 i ...
- [Leedcode][JAVA][第739题][每日温度][暴力][单调栈]
[问题描述][中等] 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替.例如,给定一个列表 temper ...
- BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分
传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...
- CF1131 G. Most Dangerous Shark (单调栈优化dp)
文章目录 problem solution code problem solution dpi:dp_i:dpi: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili,ri分别 ...
- CF1131 G. Most Dangerous Shark(DP+单调栈优化)
文章目录 problem solution code problem solution dpi:dp_i:dpi: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili,ri分别 ...
- leetcode 42. 接雨水 思考分析(暴力、动态规划、双指针、单调栈)
目录 题目 思路 暴力法 动态规划 双指针法 单调栈 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 输入:height = [0,1,0,2 ...
- [Leedcode][JAVA][第84题][柱状图中最大的矩形][暴力][单调栈]
[问题描述][困难] 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积.以上是柱状图的示例,其中每个柱子的宽度为 1 ...
最新文章
- LeetCode简单题之买卖股票的最佳时机
- 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别
- UVA_11922 Permutation Transformer 【splay树】
- 自己的缺省(sheng)源
- 【温故而知新-Javascript】使用 Ajax(续)
- Linux内核的裁剪和移植
- ubunbtu下基于c++实现MQTT客户端通信
- 【总目录】机器学习原理剖析、开源实战项目、全套学习指南(50篇合集)
- matlab imrotate中心,MATLAB imrotate函数的用法
- 就在昨天,张一鸣宣布卸任字节跳动CEO!
- 网站文章被采集?尝试使用这几种方法进行最大防护
- 数据报表开发技巧:自动为数据报表添加【小计】、【总计】行
- 第十二届“中国软件杯”大赛:A10-基于机器学习的分布式系统故障诊断系统——baseline(二)
- linux网卡的配置文件是双引号,Linux修改网卡ens33为eth0以及centos7下修改动态IP为静态IP地址...
- 电脑断电后,突然无线有线网卡无法使用
- python语言的特点-Python语言的特点有哪些?
- 男人应该多吃的10种健康食物
- 假面舞会[NOI2008]
- linux中convert用法
- esp8266-01s控制继电器开关