zoukankan      html  css  js  c++  java
  • Codeforces Round #673 (Div. 2)

    C. k-Amazing Numbers

    题意

    给你两个数n,k,求从1~n之间的每一个i在长度为n的数组中的,所有连续的长度为i的数组的公共最小值,如果没有重复值则输出-1.

    代码

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<set>
    #include<cstdio>
    #include<algorithm>
    #define debug(a) cout<<#a<<"="<<a<<endl;
    using namespace std;
    const int maxn=3e5+100;
    typedef long long LL;
    const LL inf=1e18;
    LL ans[maxn]; 
    vector<LL>v[maxn];
    int main(void)
    {
      cin.tie(0);std::ios::sync_with_stdio(false);
      LL t;cin>>t;
      while(t--)
      {
      	LL n;cin>>n;
      	for(LL i=0;i<=n+10;i++) ans[i]=inf,v[i].clear();
      	for(LL i=1;i<=n;i++){
      		LL x;cin>>x;v[x].push_back(i);	
    	}
    	for(LL i=1;i<=n;i++)
    	{
    		if(!v[i].empty())
    		{
    			LL mx=0;
    			for(LL j=1;j<v[i].size();j++)
    			{
    				mx=max(mx,v[i][j]-v[i][j-1]);
    			}
    			mx=max(mx,v[i].front()); 
    			mx=max(mx,n-v[i].back()+1);//i之间最长的距离 
    			ans[mx]=min(ans[mx],i);//更新最小值 
    		}
    	}
    	for(LL i=2;i<=n;i++) ans[i]=min(ans[i],ans[i-1]);//能覆盖小的距离一定能覆盖大的距离 
    	for(LL i=1;i<=n;i++){
    		if(ans[i]<inf) cout<<ans[i]<<" ";
    		else cout<<"-1"<<" ";
    	} 
    	cout<<endl;
      }
    return 0;
    }
     
    
  • 相关阅读:
    UIWebView 设置字体样式和行间距
    UIAlertView问题
    仿jquery的函数
    css 不换行,换行
    兼容火狐插入背景音乐
    防止屏蔽window.onload函数
    mysql
    解决手机浏览器上input 输入框导致页面放大的问题
    vue 中监听页面滚动
    WCF处理异常的方式
  • 原文地址:https://www.cnblogs.com/wangqianyv/p/13795563.html
Copyright © 2011-2022 走看看