C. k-Amazing Numbers(枚举)

    科技2022-07-12  134

    C. k-Amazing Numbers(枚举)


    思路:维护相同的数出现的最大位置差。

    然后从贪心地从小到大枚举填答案。

    时间复杂度: O ( n ) O(n) O(n)

    #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7; #define mst(a,b) memset(a,b,sizeof a) #define lx x<<1 #define rx x<<1|1 #define reg register #define PII pair<int,int> #define fi first #define se second #define pb push_back #define il inline int t,n; int a[N],d[N],last[N],ans[N]; int main(){ scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); last[i]=d[i]=0,ans[i]=-1; } for(int i=1;i<=n;i++){ int x=a[i]; d[x]=max(d[x],i-last[x]); last[x]=i; } for(int i=1;i<=n;i++){ d[i]=max(d[i],n-last[i]+1); for(int j=d[i];j<=n&&ans[j]==-1;j++) ans[j]=i; } for(int i=1;i<=n;i++) printf("%d ",ans[i]); printf("\n"); } return 0; }

    Processed: 0.011, SQL: 8