ST1 求助
  • 板块学术版
  • 楼主Atserckcn
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/10/27 19:24
  • 上次更新2024/10/27 20:55:32
查看原帖
ST1 求助
1065071
Atserckcn楼主2024/10/27 19:24

为什么在本地编译OK,上洛谷编译不了?

#include<bits/stdc++.h>
using namespace std;
#define ljl long long
const ljl N=1e5+5;
ljl n,a[N],ans,sum2,sum1;
bool used[N],killed[N];
bool cmp(ljl a,ljl b)
{
	return a>b;
} 
inline bool check()
{
	for(ljl i=1;i<=n;i++)
		if(a[i]>2)
			return false;
	return true;
}
inline checkall()
{
	ljl t=a[1];
	for(ljl i=2;i<=n;i++)
		if(a[i]!=t)
			return false;
	return true;
}
inline ljl xbound(ljl x)//第一个小于等于x的位置 
{
	ljl l=1,r=n;
	while(l<r)
	{
		ljl mid=l+r>>1;
		if(x>a[mid])
			r=mid;
		else
			l=mid+1;
	}
	return l;
}
int main(){
//	freopen("duel.in","r",stdin);
//	freopen("duel.out","w",stdout);
	scanf("%lld",&n);
	for(ljl i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	if(checkall())
	{
		printf("%lld\n",n);
		return 0;
	}
	if(check())
	{
		for(ljl i=1;i<=n;i++)
		{
			if(a[i]==2)
				++sum2;
			if(a[i]==1)
				++sum1;
		}
		if(sum2>=sum1)
			printf("%lld\n",sum2);
		else
			printf("%lld\n",sum1);
		return 0;
	}
	sort(a+1,a+n+1,cmp);
	for(ljl i=1;i<=n;i++)
	{
		ljl j=xbound(a[i]);
		while((killed[j]||a[i]<=a[j])&&j<=n)
			++j;
		if(a[i]>a[j])
			killed[j]=true;
		used[i]=true;
	}
	for(ljl i=1;i<=n;i++)
		if(!killed[i])
			++ans;
	printf("%lld\n",ans);
	return 0;
}
2024/10/27 19:24
加载中...