P2947 [USACO09MAR]向右看齐Look Up
[USACO09MAR]向右看齐Look Up
题目描述
Farmer John’s N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again standing in a row. Cow i has height H_i (1 <= H_i <= 1,000,000).
Each cow is looking to her left toward those with higher index numbers. We say that cow i ‘looks up’ to cow j if i < j and H_i < H_j. For each cow i, FJ would like to know the index of the first cow in line looked up to by cow i.
Note: about 50% of the test data will have N <= 1,000.
约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i
Input
输入输出格式
输入格式:
* Line 1: A single integer: N
- Lines 2..N+1: Line i+1 contains the single integer: H_i
第 1 行输入 N,之后每行输入一个身高 H_i。
输出格式:
* Lines 1..N: Line i contains a single integer representing the smallest index of a cow up to which cow i looks. If no such cow exists, print 0.
共 N 行,按顺序每行输出一只奶牛的最近仰望对象,如果没有仰望对象,输出 0。
输入输出样例
输入样例#1:
6
3
2
6
1
1
2
输出样例#1:
3
3
0
6
6
0
说明
FJ has six cows of heights 3, 2, 6, 1, 1, and 2.
Cows 1 and 2 both look up to cow 3; cows 4 and 5 both look up to cow 6; and cows 3 and 6 do not look up to any cow.
【输入说明】6 头奶牛的身高分别为 3, 2, 6, 1, 1, 2.
【输出说明】奶牛#1,#2 仰望奶牛#3,奶牛#4,#5 仰望奶牛#6,奶牛#3 和#6 没有仰望对象。
【数据规模】
对于 20%的数据: 1≤N≤10;
对于 50%的数据: 1≤N≤1,000;
对于 100%的数据:1≤N≤100,000;1≤H_i≤1,000,000;
题解:
本题是模拟题(当然,也有人用栈来写)
答案要求最近仰慕对象,而只能像右仰慕,便想到了先for1~n,再从右往左枚举(这样就会更新到最近的了)。但如果一个一个枚举的话会超时,所以不能套两个for。
经过思考,我们发现如果对于i点,j点不能够成为它的仰慕对象,那么j点的仰慕对象能不能成为i点的仰慕对象呢?这就产生了类似链表的结构,而时间复杂度应当是O(n log n)的吧。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;int n,j;
int h[100010],f[100010];
int main(){scanf("%d",&n);for (int i=1; i<=n; i++) scanf("%d",&h[i]);for (int i=n-1; i>=1; i--){//先处理后面牛牛(j)的仰慕对象,方便后面牛牛(j)不能够成为的前面牛牛(i)仰慕对象时,去找j牛牛的仰慕对象j=i+1;while(h[i]>=h[j] && h[j]>0)j=f[j];f[i]=j;}for (int i=1; i<=n; i++) printf("%d\n",f[i]);return 0;
}
P2947 [USACO09MAR]向右看齐Look Up相关推荐
- 洛谷 P2947 [USACO09MAR]向右看齐Look Up (队列)
题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...
- [USACO09MAR]向右看齐Look Up(单调栈、在线处理)
https://www.luogu.org/problem/P2947 题目描述 Farmer John's N (1 <= N <= 100,000) cows, convenientl ...
- 洛谷 - [USACO09MAR]向右看齐Look Up(单调栈)
题目链接:https://www.luogu.org/problem/P2947 时间限制: 1.00s 内存限制: 125.00MB 题目描述 Farmer John's N ( 1 ≤ N ≤ 1 ...
- LuoGu_2947 [USACO09MAR] 向右看齐 Look Up
题目描述 约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可以 ...
- 【洛谷P2947】向右看齐
向右看齐 题目链接 此题可用单调栈O(n)求解 维护一个单调递减栈,元素从左到右入栈 若新加元素大于栈中元素,则栈中元素的仰望对象即为新加元素 每次将小于新加元素的栈中元素弹出,记录下答案 1 #in ...
- [USACO09MAR]向右看齐Look Up————单调栈
题解:本题主要考查单调栈.先构建一个栈,如果比栈顶的数大就a[i]是之前栈顶数的仰望对象,记录它的仰望对象并将原来栈顶的数出栈,反之再将a[i]进栈. 代码如下: #include<iostre ...
- 单调队列————[USACO09MAR]向右看齐Look Up
先了解一下单调队列: 很明显的具有单调性 分为单调递增和单调递减两种,简单点讲就是维护队头为最大值或者为最小值 (建议采用双向队列 比较好写) 具体步骤:(这个是单调递减) 如果队列非空且当前值比队 ...
- c语言编程*三角形图形右看齐,EOJ 3213 向右看齐
题目描述 N 头奶牛被紧急动员起来了,它们排成了一条长列.从左向右看,排在第 i 个位置的奶牛身高为 Hi.约翰一声令下,所有奶牛向右看齐.假设每头奶牛只能看到比自己高的牛.请问它们各自看到的最近的一 ...
- P2947 向右看齐
题目描述 约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可以 ...
最新文章
- python 实现延迟的操作
- 纯CSS3制作的圆角效果按钮菜单
- 计算机中丢失sense3.dll,sense3.dll
- Avalonia跨平台入门第十四篇之ListBox折叠列表
- IIS 部署asp.net Core程序注意事项
- 计算机管理员受限用户,如何设置权限,使管理员能上网,而受限用户却不能上网?...
- 华为服务器驱动_不可错过的华为核心概念股
- c语言链表插入尾部,为什么我的程序一执行插入链表尾部,再执行别的操作就会出现问题,...
- TMGM外汇平台官网最全测评(2022年版)
- 懒人——支付宝app支付
- w10怎样关闭对计算机更改,w10电脑定时关机怎么设置 让w10系统自动关闭的设置方法...
- 服务器蓝屏 查看系统日志文件,教你电脑查看系统蓝屏日志的具体方法
- SIP穿越NAT SIP穿越防火墙
- 硬盘底座linux,ORICO推出全透明硬盘底座、移动硬盘盒
- 看了这篇文章,再也不用找人设计名片卡证啦!
- (转)JAVA 十六个常用工具类
- 为什么吃鸡体验服说当前服务器正在维护,“吃鸡”玩家盼了90天的体验服,发来“41字提醒”,含泪退出了!...
- 欧盟非个人数据流动监管新进展
- 2J53磁滞电动机转子永磁和金
- java 使用itext合并多个pdf文件成一个pdf
热门文章
- excel向程序发送命令时出现错误
- 回音壁模式matlab,一种回音壁模式光学微腔的制作方法
- 计算机二级应用软件打不开怎么办,电脑软件打不开没反应怎么办?
- “优必选“杯2021中国机器人技能大赛--赛后总结
- 如何白手起家挣到一百万?
- 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用
- NID修改数据库名称时候碰到NID-00137
- HTTP Agent理解
- sqlite3出现SQLITE_BUSY错误码的原因以及解决方法
- mysql slave是什么_是mysql作用