zoukankan      html  css  js  c++  java
  • 气温预测

    气温预测

    Description

    现有一个n天的气温表, 请你预测对于每一天,最迟多少天后可以升温(从现在到气温表中最后大于当前温度的那天)。如果不能升温,则当前输出0。

    Input

    输入第一行为一个n代表天数。

    第二行为n个整数,第i个代表第i天的气温a[i]。

    1 <= n <= 1e6

    0 < a[i] < 1e6.

    Output

    输出一行n个数,第i个数代表对于第i天,最迟多少天后可以升温,如果不能升温,输出0。

    Sample Input 1 

    5
    1 2 5 3 2

    Sample Output 1

    4 2 0 0 0

    Hint

    样例中第一天气温为1,最后一个大于1的位置在第五天,所以输出5 - 1 = 4。

    第三天气温为5,之后没有比5大的数,所以输出0。

    对a数组按温度排个升序然后维护每个数组元素后面最大天数,还要注意排序时温度相同的时候,天数小的要排在后面,因为若天数大的排在后面,则会影响前面天数小的的答案

    #include<bits/stdc++.h>
    using namespace std;
    struct node
    {
        int wd,id;
    }a[1000005];
    int ans[1000005]={0};
    bool cmp(const node&b,const node&c)
    {
        if(b.wd==c.wd)
            return b.id>c.id;
        return b.wd<c.wd;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&(a[i].wd));
            a[i].id=i;
            ans[i]=0;
        }
        sort(a+1,a+n+1,cmp);
        int maxid=0;
        //for(int i=1;i<=n;i++)
            //printf("%d %d
    ",a[i].wd,a[i].id);
        for(int i=n;i>=1;i--)
        {
            if(a[i].id<maxid)
            {
                ans[a[i].id]=maxid-a[i].id;
            }
            else
            {
                maxid=a[i].id;
    
            }
        }
        for(int i=1;i<=n;i++)
            cout<<ans[i]<<" ";
        return 0;
    }
    
  • 相关阅读:
    TCP报文
    TCP概述
    UDP
    传输层概述
    端口地址转换 PAT
    网络地址转换NAT原理介绍
    js的时间处理函数
    正则表达式相关笔记
    微信小程序实现图片拖拽
    在React中使用less
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754979.html
Copyright © 2011-2022 走看看