HDU 5749 Colmerauer 单调队列+暴力贡献
BestCoder Round #84 1003
分析:(先奉上zimpha巨官方题解)
感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天
已知一个点的up,down,left,right,即上下左右的扩展范围,如何确定贡献呢
其实也很好做,把所有可能的矩形的长算出来,得到和,宽也是一样,然后乘法原理乘起来就好
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <math.h>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int N = 1e3+;
const int INF = 0x3f3f3f3f;
const LL mod = 1ll<<;
int a[N][N],l[N][N],r[N][N],u[N][N],d[N][N];
int T,n,m;
stack<int>s;
LL cal(LL x,LL y){
return (x*(x+)/*y%mod+y*(y-)/*x%mod)%mod;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
scanf("%d",&a[i][j]);
for(int i=;i<=n;++i){
a[i][m+]=a[i][]=-INF;
while(!s.empty())s.pop();s.push();
for(int j=;j<=m;++j){
while(!s.empty()&&a[i][s.top()]>a[i][j])s.pop();
l[i][j]=s.top();s.push(j);
}
while(!s.empty())s.pop();s.push(m+);
for(int j=m;j;--j){
while(!s.empty()&&a[i][s.top()]>a[i][j])s.pop();
r[i][j]=s.top();s.push(j);
}
}
for(int j=;j<=m;++j){
a[][j]=a[n+][j]=INF;
while(!s.empty())s.pop();s.push();
for(int i=;i<=n;++i){
while(!s.empty()&&a[s.top()][j]<a[i][j])s.pop();
u[i][j]=s.top();s.push(i);
}
while(!s.empty())s.pop();s.push(n+);
for(int i=n;i;--i){
while(!s.empty()&&a[s.top()][j]<a[i][j])s.pop();
d[i][j]=s.top();s.push(i);
}
}
LL ret=;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j){
LL curl=j-l[i][j],curr=r[i][j]-j;
LL curu=i-u[i][j],curd=d[i][j]-i;
ret+=cal(curl,curr)*cal(curu,curd)%mod*a[i][j]%mod;
ret%=mod;
}
printf("%I64d\n",ret);
}
return ;
}
HDU 5749 Colmerauer 单调队列+暴力贡献的更多相关文章
- HDU5479 Colmerauer 单调栈+暴力优化
http://acm.hdu.edu.cn/showproblem.php?pid=5749 思路: bestcoder 84 贡献:所有可能的子矩阵的面积和 //len1:子矩阵所有长的和 ;i&l ...
- HDU 3401 Trade(单调队列优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:炒股.第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股 ...
- Hdu 3410 【单调队列】.cpp
题意: 给出一个数组,问你对于第i个数,从最后一个比它大的数到它之间比它小的数中最大的那个数的下标,以及它右边到第一个比它大的数中比它小的数中最大的那一个数的下标<下标从1开始>. eg: ...
- HDU 5289 Assignment(单调队列)
题意:给T足数据,然后每组一个n和k,表示n个数,k表示最大同意的能力差,接下来n个数表示n个人的能力,求能力差在k之内的区间有几个 分析:维护一个区间的最大值和最小值,使得他们的差小于k,于是採用单 ...
- HDU - 3530 Subsequence (单调队列)
Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 3530 Subsequence 单调队列
题目链接 题目给出n个数, 一个下界m, 一个上界k, 让你求出最长的一段序列, 满足这段序列中的最大的数-最小的数<=k&&>=m, 输出这段长度. 可以维护两个队列, ...
- hdu 5749 Colmerauer
题意:对于给定的$n \times m$矩阵$M$,定义$S(a,b)$为$M$的所有$a \times b$子矩阵的权重之和.一个矩阵的权重是指矩阵中所有马鞍点权值之和,在一个矩阵中某点是马鞍点当且 ...
- HDU - 6444(单调队列+思维)
链接:HDU - 6444 题意:给出一个包含 n 个数的环,每个数都有一个价值,起点任选,每次跳顺时针跳 k 个数,在哪个数就能获得该价值(包括起点),最多取 m 次,问最少需要补充多少价值,所拿的 ...
- HDU 3507 PrintArticle (单调队列优化)
题意:给出一个数列C,一个数字M,将数列分成若干段,每段的代价为(设这段的数字为k个): dp[i]=min(dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+M) 若j1& ...
随机推荐
- leetcode 5 :Longest Palindromic Substring 找出最长回文子串
题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...
- java如何得到GET和POST请求URL和参数列表
转载:http://blog.csdn.net/yaerfeng/article/details/18942739 在servlet中GET请求可以通过HttpServletRequest的getRe ...
- json的数据格式(仔细查看)
1.json对象就是jsonObject,jsonobject里可以放入很多键值对,并以逗号为分隔符. jsonObject里还可以嵌套JsonObject对象,或者数组信息作为value,数组作为k ...
- error: ‘for’ loop initial declarations are only allowed in C99 mode
比如写出下面这段程序: for (int i = 0; i < n; ++i) do_something(); 然后用gcc编译,会报 ‘for’ loop initial declaratio ...
- iOS 开发--开源图片处理圆角
概述 开源项目名称:HYBImageCliped 当前版本:2.0.0 项目用途:可给任意继承UIView的控件添加任意多个圆角.可根据颜色生成图片且可带任意个圆角.给UIButton设置不同状态下的 ...
- C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- liunx下tomcat启动报错
liunx下tomcat启动 Cannot find ./catalina.sh 2013-08-23 11:50 1521人阅读 评论(0) 收藏 举报 Cannot find ./catalina ...
- ActiveMQ 集群(1)
Queue consumer clusters(消费者集群): 简介: 同一个queue,如果一个消费者失效, 那么任何未经确认的消息将会被发送给queue上的其它消费者.如果一个消费者比其它消费者执 ...
- json格式的字符串转为json对象遇到特殊字符问题解决
中午做后台发过来的json的时候转为对象,可是有几条数据一直出不来,检查发现json里包含了换行符,造成这种情况的原因可能是编辑部门在编辑的时候打的回车造成的 假设有这样一段json格式的字符串 va ...
- 面试题_82_to_87_Date、Time 及 Calendar 的面试题
82)在多线程环境下,SimpleDateFormat 是线程安全的吗?(答案)不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该 ...