气温预测

气温预测

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;
}
原文地址:https://www.cnblogs.com/eason9906/p/11754980.html