• myschool 相思树


    题目描述

    一群妖王排成一排站在苦情巨树下,寻找自己的转世恋人。
    虽然都是妖王,但按照涂山的规定必须进行标号,标号为1的妖王排在最后面,标号为n的妖王排在最前面。每个妖王只有一个妖力值a[i]表示它们现在的地位。
    妖王们是讲究实力的,当然不服比它妖力值低的居然可以排在前面,它们现在想知道在它前面,妖力值比它低,而且离它最远的距离是多少?

    输入

    输入n表示有n个妖王
    第二行输入n个整数,表示每个妖王的妖力值a[i]

    n<=2*105

    1<=a[i]<=109

     

    输出

    对于每个妖王,妖力值比它低,而且离它最远的距离是多少,如果没有输出-1

    样例输入

    6
    5 50 45 7 10 1

    样例输出

    4 3 2 1 0 -1

    提示


    对于第一个数:5,比它小的数字是1,1距离它最远,最远距离为4
    对于第二个数:50,比它小的数字是45 7 10 1,1距离它最远,距离为3
    对于第三个数:45,比它小的数字是7 10 1,1距离它最远,距离为2
    对于第四个数:50,比它小的数字是10 1,1距离它最远,距离为1
    对于第五个数:10,比它小的数字是1,1距离它最远,距离为0
    对于第六个数:已经没有比它小的数字了,距离为-1

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 int Min[200005], arr[200005];
     5 int main()
     6 {
     7     int n;
     8     while(scanf("%d",&n) != EOF)
     9     {
    10         for(int i = 0; i < n; i++)
    11             scanf("%d",&arr[i]);
    12         Min[n-1] = arr[n-1];
    13         for(int i = n - 2; i >= 0; i--)
    14         {
    15             Min[i] = min(Min[i+1], arr[i]);
    16         }
    17         for(int i = 0; i < n;i++)
    18         {
    19             int l = i + 1,r = n - 1,mid;
    20             while(l <= r)
    21             {
    22                 mid = (l + r) / 2;
    23                 if(Min[mid] < arr[i])
    24                     l = mid + 1;
    25                 else r = mid - 1;
    26             }
    27             printf("%d",l-i-2);
    28             if(i<n-1)
    29                 printf(" ");
    30         }
    31         printf("
    ");
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    Maven Docker镜像使用技巧
    Dockerfile 最佳实践
    无状态服务
    Docker 镜像加速器
    如何设置Docker容器中Java应用的内存限制
    k8s的容器监测探针
    (部署)使用kubernetes的deployment进行RollingUpdate
    linux下brctl配置网桥
    代码高亮插件
    Docker容器
  • 原文地址:https://www.cnblogs.com/jxust-jiege666/p/6548348.html
Copyright © 2020-2023  润新知