who is in front of me 解题报告
题目描述:N(1<=N<=50005)个学生站成一个纵队,每个人只能看到前面身高比他高(严格大于)的人
求所有人中能看到的最大人数
分析:对于某个人A,设前面第一个身高比他高的人是B。如果B不存在,那么A看到0个人。若B存在,那么A既能看到B,也能看到B所能看到的人(PS:题意是每个人只能看到身高严格大于自己的人,身高与自己相同的人视为看不见)。
状态表示:F(x)表示x能看到的人数
转移方程:F(A)=F(B)+1
怎么才能很快找到A前面第一个比他高的人是谁?对于每个人x,记录他前面第一个比他高的人legt[x]。对于每个人A,我们比较A和A-1的高矮,如果A-1比A高,那么A-1自然是第一个比他高的人。否则我们寻找第一个比A-1高的人,也就是left[A-1],因为在A-1与left[A-1]之间的所有人,身高都比A-1矮,他们也自然不可能比A高。比较A与left[A-1]的高矮,如果不行再找left[left[A-1]]...,直到找到比A高的人,或者发现没有一个人比A高。然后可以用dp求解了。
计算left的代码如下,h为每个人的高度:
for(int i=0;i<N;i++){
int j;
for(j=i-1;j>=0&&h[j]<=h[i];j=left[j]) ;
left[i]=j;
}
#include<cstdio>
int T,n,h[],num[],left[];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",&h[i]);
int best=;
for(int i=; i<n; i++)
{
int j;
for(j=i-; j>=&&h[j]<=h[i]; j=left[j])
;
left[i]=j;
if(j==-) num[i]=;
else num[i]=num[j]+;
best= best>num[i] ? best : num[i];
}
printf("%d\n",best);
}
return ;
}
who is in front of me 解题报告的更多相关文章
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...
- NOIP2015 提高组(senior) 解题报告
过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...
- 10.30 NFLS-NOIP模拟赛 解题报告
总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...
- 【原创】leetCodeOj --- Sliding Window Maximum 解题报告
天,这题我已经没有底气高呼“水”了... 题目的地址: https://leetcode.com/problems/sliding-window-maximum/ 题目内容: Given an arr ...
- GX/GZOI2019 day2 解题报告
GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...
- 学大伟业Day1解题报告
学大伟业Day1解题报告 张炳琪 一. 时间分配 T1:30分钟 T2: 60分钟 T3:100分钟 二.答题情况及错因 T1:100 T2:55 T3 ...
- 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...
随机推荐
- C++中的多态
多态性是面向对象程序设计的重要特征之一.多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态的实现方式包括以下3种:函数重载.运算符重载.虚函数. 1.运算符重载: #inc ...
- 不用Unity库,利用.NET动态代理自己实现AOP
AOP意为面向切面的程序设计,主要表现为对不同的代码逻辑进行隔离,从而降低不同业务逻辑之间的耦合性,AOP又理解为“横切”,可以在不改变原有实现的情况下,对代码进行拦截和扩展,如果原有设计像一个瓶子, ...
- 修改eclipse中tomcat的发布路径
当我们在eclipse部署好tomcat的时候,默认这个项目是部署在eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\t ...
- 4_1 wp8数据绑定与独立存储空间[wp8特色开发与编程技巧]
Wp8数据绑定与独立存储空间 数据绑定为基于 Silverlight 的应用程序提供了一种显示数据并与数据进行交互的简便方法. 数据的显示方式独立于数据的管理. UI 和数据对象之间的连接或绑定使数据 ...
- exynos 4412 eMMC配置及使用方法
/** ****************************************************************************** * @author Maox ...
- Silverlight中弹出网页
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(), “_blank”,"fullscreen=yes,channelmode ...
- MongoDB与php的配合使用 【windows版】
通过学习了如何使用和部署MongoDB,尝试了一下如何将mongodb应用到php的程式中去. 1.预备工作 首先得准备好mongodb,并按照相关方法部署以及服务能正常运行中. 对于初学者,可以参考 ...
- 如何学好PHP
1.明确自己的学习目标和大的方向,选择并锁定一门语言,按照自己的学习方向努力学习.认真研究. 2.学会配置PHP的开发环境,选择一种适合自己的开发工具. 3.基础扎实,多阅读一些基础教材,了解基本的编 ...
- Response.Redirect和Server.Transfer
今天又比较闲,逛了逛园子,看看asp.net的内容,看到一篇关于这两个的比较: http://www.cnblogs.com/yunfeng8967/archive/2008/03/06/109323 ...
- 在Linux下写一个简单的驱动程序
本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...