板块漂移
  • 板块灌水区
  • 楼主忘怜城羡
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/26 20:39
  • 上次更新2024/2/26 23:28:56
查看原帖
板块漂移
374756
忘怜城羡楼主2024/2/26 20:39

CF1175E,样例过不去/kk

#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e5+7;
int a[MAXN],s[MAXN],pre[MAXN],mp[MAXN],ans;
mt19937 myrand(time(0));
int main()
{
	int n;
	scanf("%d",&n);
	for(int i(1);i<=n;++i)
	{
		scanf("%d",&a[i]);
		mp[a[i]]=myrand();
		pre[i]=pre[i-1]^mp[a[i]];
	}
	for(int i(1);i<=n;++i)
		s[i]=s[i-1]^mp[i];
	for(int i(1);i<=n;++i)
	{
		if(a[i]==1)
		{
			int maxe=1;
			ans++;
			for(int j(i+1);j<=n&&a[j]!=1;++j)
			{
				maxe=max(maxe,a[j]);
				if(j>=maxe&&j-maxe+1<=i&&s[maxe]==pre[j]^pre[j-maxe])
					ans++;
			}
		}
	}
	reverse(a+1,a+n+1);
	for(int i(1);i<=n;++i)
		pre[i]=pre[i-1]^mp[a[i]];
	for(int i(1);i<=n;++i)
	{
		if(a[i]==1)
		{
			int maxe=1;
			for(int j(i+1);j<=n&&a[j]!=1;++j)
			{
				maxe=max(maxe,a[j]);
				if(j>=maxe&&j-maxe+1<=i&&s[maxe]==pre[j]^pre[j-maxe])
					ans++;
			}
		}
	}
	printf("%d",ans);
	return 0;
}
2024/2/26 20:39
加载中...