A.k-Amazing Numbers
http://codeforces.com/contest/1416/problem/A
给定一个长为 n n n的数组a[],定义“k-Amazing Number”是最小的、满足在数组a[]中的任意连续k个数字中出现至少一次的数字。
现在给定数组a[],依次求"1…n-Amazing Number",不存在则输出-1。
(多组数据)
#include<stdio.h>
#include<map>
#include<queue>
#include<iostream>
#include<algorithm>
#include<vector>
const long long MOD=1000000007;
using namespace std;
int t,n;
long long a[300005],b[300005];
long long pre[300005],ans[300005];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)ans[i]=1e9,pre[i]=0,b[i]=0;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
b[a[i]]=max(b[a[i]],i-pre[a[i]]);
pre[a[i]]=i;
}
for(int i=1;i<=n;i++)
{
b[i]=max(b[i],(n+1)-pre[i]);
}
for(int i=1;i<=n;i++)if(b[i]<=n)
{
if(i<ans[b[i]])ans[b[i]]=i;
}
for(int i=2;i<=n;i++) if(ans[i-1]<ans[i]) ans[i]=ans[i-1];
for(int i=1;i<=n;i++)
{
if(ans[i]