• Codeforces Round #673 C. k-Amazing Numbers


    题目大意:有一个长度为n的数组a,定义k-amazing为a中每个长度为k的子串都有的数字中最小的。要求输出k=1,2...n时的k-amazing。

    思路:对每个数字求最长间距cal 则k>=cal时表示k-amazing条件成立 注意应该对一个数字中第一次出现的位置和最后一次出现的位置特判

     1 #include<bits/stdc++.h>
     2 #define fi first
     3 #define se second
     4 #define pb(i) push_back(i)
     5 #define rep(i,a,b) for(int i=a;i<=b;i++)
     6 #define per(i,a,b) for(int i=b;i>=a;i--)
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define VI vector<int>
     9 #define VLL vector<ll>
    10 #define MPII map<pair<int,int>,int>
    11 #define mp make_pair
    12 #define PQI priority_queue<int>
    13 using namespace std;
    14 typedef long long ll;
    15 typedef unsigned long long ull;
    16 const int N = 3e5+10;
    17 const int INF = 0x3f3f3f3f;
    18 const int inf = - INF;
    19 const int mod = 1e9+7;
    20 const double pi = acos(-1.0);
    21 const double eps=1e-5;
    22 int n;
    23 vector<int>v[N];
    24 int ans[N];
    25 int main(){
    26     int T,x;
    27     scanf("%d",&T);
    28     while(T--){
    29         scanf("%d",&n);
    30         rep(i,0,n) ans[i]=INF,v[i].clear();
    31         rep(i,1,n){
    32             scanf("%d",&x);
    33             v[x].push_back(i);
    34         }
    35         rep(i,1,n){
    36             if(v[i].empty())continue;
    37             int dis=0;
    38             for(int j=1;j<v[i].size();j++)
    39                 dis=max(dis,v[i][j]-v[i][j-1]);
    40             dis=max(dis,max(v[i].front(),n-v[i].back()+1));
    41             ans[dis]=min(ans[dis],i);
    42         }
    43         rep(i,2,n) ans[i]=min(ans[i],ans[i-1]);
    44         rep(i,1,n){
    45             if(ans[i]==INF) printf("-1 ");
    46             else printf("%d ",ans[i]);
    47         }
    48         printf("
    ");
    49         /*
    50         rep(k,1,n){
    51             int flag=-1;
    52             rep(i,1,n){
    53                 if(k>=cal[i]){
    54                     flag=i;
    55                     break;
    56                 }
    57             }
    58             printf("%d%c",flag,k==n?'
    ':' ');
    59         }*/
    60     }
    61     system("pause");
    62     return 0;
    63 }
  • 相关阅读:
    文件内容排名算法,输入排名函数,返回排名后的文件名
    线段树做大数据排序
    给字符排序-基类排序二分查找-JavaScript
    后缀数组、名次数组-JavaScript
    二分查找法、二分去重排序法,返回最接近的位置和实际位置
    用四叉树对图像分类,获取tag和key
    Linux显示所在Git分支
    Linux中设置Git显示颜色
    屏蔽网页广告
    tf.add_to_collection,tf.get_collection简介
  • 原文地址:https://www.cnblogs.com/yoshinaripb/p/13880823.html
Copyright © 2020-2023  润新知