54求调(TLE)
查看原帖
54求调(TLE)
1471248
lifeam楼主2024/12/19 21:04

代码:

#include<bits/stdc++.h>
using namespace std;
char *p1, *p2, buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
using namespace std;

inline int rd() 
{
	int x = 0, f = 1;
	char c = nc();
	while (c < 48 || c > 57) f = (c == '-') ? -1 : 1, c = nc();
	while (c >= 48 && c <= 57)	x = (x<<3)+(x<<1) + c-48, c = nc();
	return x*f;
}


int n,a[50002],dp1[50002],dp2[50002],b[50002];
bool use1[100002],use2[100002];
int main(){
	freopen("P3129_3.in","r",stdin);
	n=rd();
	for (int i=1;i<=n;i++){
		a[i]=rd();
		use1[a[i]]=use2[a[i]]=1;
	}
	int cnt=0;
	for (int i=1;i<=2*n;i++){
		if (!use1[i]) b[++cnt]=i;
	}
	for (int i=1;i<=n;i++){
		int o=a[i]+1;
		while (o<=2*n&&use1[o]==1) o++;
		dp1[i]=dp1[i-1];
		if (o<=n*2){
			use1[o]=!use1[o];
			dp1[i]++;
		}
		int j=n+1-i;
		o=a[j]-1;
		while (o>=1&&use2[o]==1) o--;
		dp2[j]=dp2[j+1];
		if (o>=1){
			use2[o]=!use2[o];
			dp2[j]++;
		}
		
	}
	int ans=0;
	for (int i=1;i<=n;i++){
		ans=max(ans,dp1[i]+dp2[i+1]);
	}
	printf("%d",ans);
	return 0;
}

第三个就爆了(大悲)

2024/12/19 21:04
加载中...