题解|#E. Air Conditioners# cf

做这个题的时候超时了一次,因为遍历序列的时候用了两层for来处理每个位置的最小值,最差复杂度高达9* 10^10,已经不是2s能完成的了,计算机大概1s只能处理10^8/10^9次方的数据。

后来改用两个一层for循环,先从前向后,再从后向前遍历(顺序怎么样都行),然后就ok了,这样子的复杂度只有(3* 10^5)* 2,可以通过。

#include<bits/stdc++.h>
using namespace std;
const int M=3e5+5;
int a[M];
typedef long long ll;
ll tep[M];
int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int t; cin>>t;
	while(t--){
		int n,k; cin>>n>>k;
        for(int i=0;i<=n+1;i++) tep[i]=0x3f3f3f3f;
		for(int i=1;i<=k;i++){
			cin>>a[i];
		}
		for(int i=1;i<=k;i++){
			cin>>tep[a[i]];
		}
        
		for(int i=1;i<=n;i++) tep[i]=min(tep[i],tep[i-1]+1);
        for(int i=n;i>=1;i--) tep[i]=min(tep[i],tep[i+1]+1);
		for(int i=1;i<=n;i++) cout<<tep[i]<<" ";
		cout<<endl;
	}
	return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
06-13 12:13
已编辑
东北大学 射频工程师
26毕业的,日常实习还能找到吗
求实习的青提很想去大厂:目前应该还有hc吧,腾讯感觉还有hc,最近捞了我好几次,因为目前有offer,所以不准备面了,可以再找找,不行的话就找找中小厂试试,因为我之前也找了好久,准备放弃了,结果有个岗位流程特别顺利,然后就oc,只能说坚持下试试,万一呢💪
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务