zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    小程序开发学习
    guava 学习一 函数,集合操作
    《构建之法》第四章 两人合作 读后感
    模拟退火学习笔记
    Haywire
    [JSOI2004]平衡点
    CF1039D You Are Given a Tree
    CF797E Array Queries
    [SHOI2014]三叉神经树
    [国家集训队]Tree II
  • 原文地址:https://www.cnblogs.com/yoshinaripb/p/13880823.html
Copyright © 2011-2022 走看看