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& ...
随机推荐
- POJ 1054 The Troublesome Frog(枚举+剪枝)
题目链接 题意 :给你r*c的一块稻田,每个点都种有水稻,青蛙们晚上会从水稻地里穿过并踩倒,确保青蛙的每次跳跃的长度相同,且路线是直线,给出n个青蛙的脚印点问存在大于等于3的最大青蛙走的连续的脚印个数 ...
- 关于Model层中Datetime Datetime? 默认值的问题
DateTime 和 DateTime?前者不允许为空,会有默认值,而DateTime?可以为Null 其他数值型同理!
- [SQL Server 系] -- 模糊查询
SQL Server中的通配符有下面四种 通配符 说明 % 包含零个或多个字符的任意字符串 _(下划线) 任意单个字符 [ ] 任意在指定范围或集合中的单个字符 [^ ] 任意不在指定范围或集合中的单 ...
- OPenGL中三维图形的矩阵变换
对于二维的图形开发,拿简单的图片显示来说,我们主要的目的:就是在一块显示buffer中,不停的把每个像素进行着色,然后就可以绘制出来了.为了速度,很多其他的加速方法,但原理基本上就是这样了. 很直观, ...
- [hackerrank]The Love-Letter Mystery
https://www.hackerrank.com/contests/w3/challenges/the-love-letter-mystery 简单题. #include <cstdlib& ...
- *[topcoder]LongWordsDiv2
http://community.topcoder.com/stat?c=problem_statement&pm=13147 此题关键在于发现ABAB的组合最多有26*26种,可以穷举,然后 ...
- Hibernate逍遥游记-第12章 映射值类型集合-005对集合排序(<order-by>\<sort>)
1. 2. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...
- 企业用户2T(含秒传),普通用户20G
周鸿祎一定要看的建议(要求置顶):可以解决本次云盘事件的建议!!! 2016-10-23 20:23 | 复制链接 | 淘帖 461334 本帖最后由 cqthxin 于 2016-10-23 20: ...
- Android:PopupWindow简单弹窗
两布局,一个当前布局页面和一个点击展示布局页面,主程序代码: public class MainActivity extends Activity { private PopupWindow pop; ...
- P25、面试题1:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); CMyStr ...