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;
    }
    
  • 相关阅读:
    [fw]PAGE_SIZE & PAGE_SHIFT & _AC()
    Memory layout of x86_64 in Linux
    Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)
    ret/retn人为改变执行地址
    [fw]LINUX中断描述符初始化
    查看x86主機是否支援64bit in Linux
    Linux.中断处理.入口x86平台entry_32.S
    [fW]中断处理函数数组interrupt[]初始化
    Linux GNU GAS introduction
    洛谷试炼场 3-5数论 3-17 倍增
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754979.html
Copyright © 2011-2022 走看看