P3401: [Usaco2009 Mar]Look Up 仰望
这道题第一眼还以为是树状数组,于是乎打着打着也是能过的
const maxn=;
var n,i,j,maxx:longint;
h,l:array[..] of longint;
p:array[..] of longint;
function lowbit(x:longint):longint;
begin
exit(x and (-x));
end;
procedure insert(x,i:longint);
var tem:longint;
begin
tem:=x;
while tem<=maxx+ do
begin
p[tem]:=i;
tem:=tem+lowbit(tem);
end;
end;
function work(x:longint):longint;
var tem:longint;
begin
tem:=maxn;
while x> do
begin
if (p[x]<tem) and (p[x]<>) then tem:=p[x];
x:=x-lowbit(x);
end;
if tem=maxn then exit()
else exit(tem);
end;
begin
readln(n);
for i:= to n do
begin
readln(h[i]);
if h[i]>maxx then maxx:=h[i];
end;
for i:= to n do
h[i]:=maxx+-h[i];
l[n]:=;
insert(h[n],n);
for i:=n- downto do
begin
l[i]:=work(h[i]-);
insert(h[i],i);
end;
for i:= to n- do
writeln(l[i]);
write(l[n]);
end.
然而这道题正确解法是 单调栈!!
type
node=record
num,h:longint;
end;
var n,i,j,num,now:longint;
stack:array[..] of node;
h,l:array[..] of longint;
begin
readln(n);
for i:= to n do
readln(h[i]);
now:=;
for i:=n downto do
begin
while (now>) and (stack[now].h<=h[i]) do
dec(now);
l[i]:=stack[now].num;
inc(now);
stack[now].h:=h[i];
stack[now].num:=i;
end;
for i:= to n do writeln(l[i]);
end.
好吧,差不多,差不多=-=//
(转载请注明出处:http://www.cnblogs.com/Kalenda/)
P3401: [Usaco2009 Mar]Look Up 仰望的更多相关文章
- BZOJ3401: [Usaco2009 Mar]Look Up 仰望
3401: [Usaco2009 Mar]Look Up 仰望 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 87 Solved: 58[Submit ...
- BZOJ 3401: [Usaco2009 Mar]Look Up 仰望( 单调栈 )
n <= 105 , 其实是10 ^ 5 ....坑...我一开始写了个模拟结果就 RE 了.. 发现这个后写了个单调栈就 A 了... ---------------------------- ...
- 3401: [Usaco2009 Mar]Look Up 仰望
3401: [Usaco2009 Mar]Look Up 仰望 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 136 Solved: 81[Submi ...
- 【BZOJ】3401: [Usaco2009 Mar]Look Up 仰望(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=3401 还能更裸一些吗.. 维护一个递减的单调栈 #include <cstdio> #i ...
- BZOJ 3401: [Usaco2009 Mar]Look Up 仰望(离线+平衡树)
刷银组刷得好开心= = 离线按权值排序,从大到小插入二叉树,查找树中比这个数大的 CODE: #include<cstdio>#include<iostream>#includ ...
- bzoj 3401: [Usaco2009 Mar]Look Up 仰望【单调栈】
用单调递减的栈从后往前扫一遍即可 #include<iostream> #include<cstdio> using namespace std; const int N=10 ...
- bzoj 3399: [Usaco2009 Mar]Sand Castle城堡
3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec Memory Limit: 128 MB Description 约翰用沙子建了一座城堡.正 ...
- BZOJ3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 89 Solve ...
- BZOJ3399: [Usaco2009 Mar]Sand Castle城堡
3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 22 Solved: 17[Sub ...
随机推荐
- 问 如何使用css将select的边框以及右边的小三角形去掉?
最好css2,css3都给出解决方案,效果如下: CSS2 只能使用div和ul进行模拟了,结构很简单,具体可参考Alice的 button-dropdownCSS3 可以使用CSS3的属性appea ...
- C# 调用控制台程序,并获取输出写入文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 阿里 Java面试 知识点
摘自: http://blog.csdn.net/wtyvhreal/article/details/45291835 =================================== 基础知识 ...
- javaSE第十五天
第十五天 117 1. 对象数组(掌握) 117 (1)定义: 117 (2)对象数组的内存图解 117 (3)案例: 117 2. 集合(Collection)(掌握) ...
- 基本的Web控件四
基本的Web控件用法二 ListBox控件 页面布局: <div> <h1>ListBox控件</h1> 学生列表: <br/> <asp:Lis ...
- ADO.NET中的DataSet和DataAdapter
DataSet和DataTable DataSet是一个数据集合,存储在内存中,算是一个临时的数据库. 个人觉得,不是太常用了,DataTable或者直接用List<model>存数据比这 ...
- ecshop常用语句
ecshop之中的IF语句: <select name="product_cat" id="product_cat" class="form-c ...
- iOS中使用子线程的完整方法
http://www.cnblogs.com/ygm900/archive/2013/06/23/3151691.html 第一步:开启子线程 //开启子线程到网络上获取数据 myFirstThrea ...
- 用jquery循环map
前些天记录了java中for循环取map,发现用jquery的each一样可以取map(我称之为js的map,不要较劲),且顺序和map中顺序一致.废话少说,看代码 1 2 3 4 5 6 7 8 9 ...
- C# 平时碰见的问题【1】
1. SqlBulkCopy 可以利用这个类实现快速大批量新增数据的效果, 但在使用过程中发现了一个问题: 无法将数据源中的DateTime类型转换成数据库中的int类型 看起来就是数据列不对应导致的 ...