zoukankan      html  css  js  c++  java
  • 洛谷P2947 [USACO09MAR]仰望Look Up

    P2947 [USACO09MAR]仰望Look Up

      • 74通过
      • 122提交
    • 题目提供者洛谷OnlineJudge
    • 标签USACO2009云端
    • 难度普及/提高-
    • 时空限制1s / 128MB

      讨论  题解  

    最新讨论更多讨论

    • 中文翻译应当为向右看齐
    • 题目中文版范围。。

    题目描述

    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<j且Hi<Hj,我们可以说奶牛i可以仰望奶牛j. 求出每只奶牛离她最近的仰望对象.

    Input

    输入输出格式

    输入格式:
    • Line 1: A single integer: N

    • Lines 2..N+1: Line i+1 contains the single integer: 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.

    输入输出样例

    输入样例#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.

    分析:和前几题差不多,不过就是要记录一下每次栈顶的位置.

    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int n,h[100010],ans[100010],stk[100010],top,num[100010];
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            scanf("%d", &h[i]);
    
        for (int i = n; i >= 1; i--)
        {
            while (top != 0 && stk[top] <= h[i])
                top--;
            ans[i] = num[top];
            stk[++top] = h[i];
            num[top] = i;
        }
        for (int i = 1; i <= n; i++)
            printf("%d
    ", ans[i]);
    
        return 0;
    }
  • 相关阅读:
    hdu 1823 Luck and Love 二维线段树
    UVA 12299 RMQ with Shifts 线段树
    HDU 4578 Transformation 线段树
    FZU 2105 Digits Count 线段树
    UVA 1513 Movie collection 树状数组
    UVA 1292 Strategic game 树形DP
    【ACM】hdu_zs2_1003_Problem C_201308031012
    qsort快速排序
    【ACM】nyoj_7_街区最短路径问题_201308051737
    【ACM】nyoj_540_奇怪的排序_201308050951
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7050063.html
Copyright © 2011-2022 走看看