为什么在本地编译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;
}