首页 > 其他 > 详细

C.k-Amazing Numbers(cf div2 673)

时间:2020-10-02 22:36:23      阅读:84      评论:0      收藏:0      [点我收藏+]
#include<bits/stdc++.h>

using namespace std;

const int N = 300010;

vector<int>p[N];  
int ans[N];

int main()
{
    int t;
    scanf("%d",&t);
    while(t --)
    {
        int n,x;
        scanf("%d",&n);
        for(int i = 1;i <= n;i ++) p[i].clear(),ans[i] = -1; //重置数组
        for(int i = 1;i <= n;i ++)//读入数据
        {
            scanf("%d",&x);
            p[x].push_back(i);
        }
        int r = n + 1;
        for(int i = 1;i <= n;i ++) 
        {
            int l = 0,now = 0;
            for(int j = 0;j < (int)p[i].size();j ++)
            {
                l = max(l,p[i][j] - now ); //相邻两个数字之间的距离
                now = p[i][j];
            }
            l = max(l , n - now + 1); //最后一个数字距离末尾的距离

            if(l < r)
            {
                for(int j = l;j < r;j ++) ans[j] = i; //i 由小到大遍历,确保答案正确
                r = l; 
            }
        }
        for(int i = 1;i <= n;i ++) printf("%d ",ans[i]);
        puts("");
    }
    return 0;
}

 

C.k-Amazing Numbers(cf div2 673)

原文:https://www.cnblogs.com/zyz010206/p/13762525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!