随笔 - 216,  文章 - 0,  评论 - 17,  阅读 - 25463

比赛链接:

https://codeforces.com/contest/1699

C. The Third Problem

题意:

给定一个排列 a,找到排列 b,要求满足,对于任意 1<=l<r<=n 的区间 MEX[al,al+1,...,ar] = MEX[bl,bl+1,...,br],问 b 有多少种可能。

思路:

对于一个区间 [L,R],如果它的 MEX=x,那说明 [0,x1] 的数都在区间中出现过了,而 x 可以在区间中除了 [0,x1] 所在的位置任意移动,都不会影响 MEX 的值,由此,可以构造出解题方法。

代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int mod = 1e9 + 7, INF = 1e9;
void solve(){
	LL n;
	cin >> n;
	vector <LL> p(n + 1);
	for (int i = 0; i < n; i ++ ){
		LL x;
		cin >> x;
		p[x] = i;
	}
	LL L = INF, R = -INF, ans = 1;
	for (int i = 0; i < n; i ++ ){
		if (L <= p[i] && p[i] <= R){
			ans = ans * (R - L - i + 1) % mod;
		}
		L = min(L, p[i]);
		R = max(R, p[i]);
	}
	cout << ans << "\n";
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	LL T;
	cin >> T;
	while (T -- )
		solve();
	return 0;
}
posted on   Hamine  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示