为啥超时鸭!!!
查看原帖
为啥超时鸭!!!
1148832
LabmemNo_012LzTopic楼主2024/10/22 23:50
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<map>
using namespace std;

map<int, int>hx, hh;
int a[100005] = { 0 }, ans[100005] = { 0 }, fx[100005] = { 0 };

int dfs(int x)
{
    hx[x] = 1;
    if (fx[x])
    {
        return a[x] = dfs(x + 1);
    }
    else return a[x] = (a[x - 1] + a[x]) / 2;
}

int main()
{
    int n, x, k, len = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> x;
        k = len;
        while (x < a[k])
        {
            a[k + 1] = a[k];
            ans[hh[a[k + 1]]] = k + 1;
            k--;
        }
        a[k + 1] = x;
        ans[i] = k + 1;
        hh[x] = i;
        len++;
    }
    fx[1] = 1;
    for (int i = 2; i <= n - 1; i++)
    {
        if (abs(a[i - 1] - a[i]) > abs(a[i + 1] - a[i]))fx[i] = 1;
    }
    for (int i = 1; i <= n; i++)
    {
        if (hx[i])continue;
        if (fx[i])
        {
            hx[i] = 1;
            a[i] = dfs(i + 1);
        }
        else a[i] = a[i - 1];
    }
    for (int i = 1; i <= n; i++)
    {
        printf("%d ", a[ans[i]]);
    }
    return 0;
}

2024/10/22 23:50
加载中...