Codeforces - Monotonic Renumeration

題目鏈接:Codeforces - Monotonic Renumeration


因爲任意兩個相同的數字之間必須相等,其實就是這兩個數之間只能填同一個數字。

所以相當於就是把區間分成一個部分 答案就是 ans=2^(cnt-1)

所以就是求多少部分,前綴和維護即可。


AC代碼:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e5+10,mod=998244353;
int n,a[N],sum[N],res,ans=1;	map<int,int> mp,vis;	
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)	scanf("%d",&a[i]),mp[a[i]]=i;
	for(int i=1;i<=n;i++){
		if(vis[a[i]]||mp[a[i]]==i)	continue;
		sum[i+1]++,sum[mp[a[i]]+1]--;
	}
	for(int i=1;i<=n;i++)	sum[i]+=sum[i-1];
	for(int i=1;i<=n;i++)	if(!sum[i]) res++;
	for(int i=1;i<res;i++)	ans=1LL*ans*2%mod;
	cout<<ans;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章