CF1759G

Description

{a}为一个n个数排列,n/2给n / 2个数{bb},bimax(a2i1,a2i)b_i表示max(a_{2i - 1},a_{2i})

求字典序最小的{a}

sample

6
6
4 3 6
4
2 4
8
8 7 2 3
6
6 4 2
4
4 4
8
8 7 4 5

    
1 4 2 3 5 6 
1 2 3 4 
-1
5 6 3 4 1 2 
-1
1 8 6 7 2 4 3 5 

Solution

每次需要选一个数放到bib_i前,需要保证后面的bib_i有比他小的数可选,且每次选的数尽量小(后面的数选的数尽量大)。

用set 1.判重,2. 二分查找 ,, 从后往前选,每次选刚好比他小的数。

code

int T,n,a[200010];

int main(){
	cin >> T;
	while(T--){
		set<int> s;
		cin >> n;
		bool yo = 1;
		rep(i,1,n)s.insert(i);
		rep(i,1,n / 2){
			rd(a[i * 2 ]);
			yo &= s.count(a[i * 2]);
			s.erase(a[i * 2]);
		}
		
		if(!yo){
			puts("-1");
			continue;
		}
		
		per(i,n / 2,1){
			auto it = s.lower_bound(a[i * 2]);
			if(it == s.begin()){
				yo = 0;
				break;
			}
			a[2 * i - 1] = *--it;
			s.erase(it);
		}
		if(!yo){
			puts("-1");
			continue;
		}
		else rep(i,1,n)printf("%d ",a[i]);
		printf("\n");
	}
	return 0;
}
全部评论

相关推荐

05-29 20:34
门头沟学院 C++
KarlAllen:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
无实习如何秋招上岸
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
昨天 13:50
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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