Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维+哈希表)

it2023-08-03  71

有 n 个数 a 数组,要求你求出 ans[k] k  [1,n] ,定义 ans[k] 对于数组 a 中每一个长度为 k 的子段中,都存在一些数 m1,m2,m3,……mi , m 为其中的最小值,作为 ans[k] 的值

const int N=3e5+5; const ll mod=21252; int n,m,t; int i,j,k; int a[N]; vector<int> v[N]; int ans[N]; void init() { ms(ans,inf); for(i=0;i<N;i++) v[i].clear(); } int main() { //IOS; rush(){ sd(n); init(); for(i=1;i<=n;i++) sd(a[i]),v[a[i]].pb(i); for(i=1;i<=n;i++){ if(v[i].size()==0) continue; int dis=0; for(j=1;j<v[i].size();j++){ dis=max(dis,v[i][j]-v[i][j-1]); } dis=max(dis,v[i][0]); dis=max(dis,n-v[i].back()+1); ans[dis]=min(ans[dis],i); } for(i=2;i<=n;i++) ans[i]=min(ans[i],ans[i-1]); for(i=1;i<=n;i++){ if(ans[i]==inf) printf("-1 "); else printf("%d ",ans[i]); } puts(""); } PAUSE; return 0; }

 

最新回复(0)