博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1057,poj3250
阅读量:6577 次
发布时间:2019-06-24

本文共 746 字,大约阅读时间需要 2 分钟。

bzoj1057本质上是求最大子矩阵;

第一问是一个经典的O(n2)dp

第二问就是最大子矩阵,回眸一下当年卡了我很久的问题;

首先穷举显然不行(这不废话吗?);

首先我们预处理每个点可以最大向上延展到哪里;

然后我们一行一行看每个点能以最大延展高度向左右延展到多少

这其中的最大值即answer;

初看处理每行上点左右延展距离为O(n2)

实际上是可以以O(n)搞定的

单调队列?确实可以,但是很烦……

分左延展右延展两种情况考虑

用l[j]表示这行上列为j的点最远可以延伸到哪个点,然后

l[j]:=j;

while (l[j]>0) and (h[j]<=h[l[j]-1]) do l[j]:=l[l[j]-1];

妙哉,问题得解;

由这种思路,我以迅雷不急掩耳之势拍出poj3250,不到20行代码141MS过,不错!

1 var a,d:array[0..80010] of longint; 2     p,i,n,m:longint; 3     s:int64; 4 begin 5   readln(n); 6   for i:=n downto 1 do 7     readln(a[i]); 8   a[0]:=2147483647; 9   d[1]:=1;10   for i:=2 to n do11   begin12     d[i]:=i;13     while a[i]>a[d[i]-1] do d[i]:=d[d[i]-1];14     s:=s+i-d[i];15   end;16   writeln(s);17 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473294.html

你可能感兴趣的文章
有信网络电话被KC网络电话收购了吗?
查看>>
Java 解析 python使用 pickle序列化后的数据
查看>>
Redis 列表(List)
查看>>
爬虫爬取的网易云热门歌单
查看>>
maxwell的使用--日志增量订阅&消费
查看>>
【示例教程】如何使用LEADTOOLS 的JAVA接口从护照中识别和提取数据
查看>>
关于studio升级 部分报错 查找原因的方法--个人总结
查看>>
Java通信编程 Java Scoket
查看>>
简单对比WDCP与宝塔面板WEB环境区别与选择建议
查看>>
PostgreSQL全文检索简介
查看>>
Canvas学习:globalCompositeOperation详解
查看>>
C语言轻松高效学习方法之:多种方法实现
查看>>
javascript--Object遍历
查看>>
网络协议详解
查看>>
【Java动态性】之反射机制 reflection
查看>>
前端框架是什么?十个主流web前端框架分析
查看>>
第一章 计算机工作原理
查看>>
Java 集合 HashMap ConcurrentHashMap
查看>>
ActiveReports 9实战教程(3): 图文并茂的报表形式
查看>>
H3C三层交换机策略路由---准入流量导入实施
查看>>