有一个疑问
查看原帖
有一个疑问
701387
xiaoliebao1115楼主2024/5/13 19:05
#include<bits/stdc++.h>
using namespace std;
#define ll long long
long long n,m,p;
ll wz,x,k1[1000005],k2[1000005],cnt;
long long ans;
struct node
{
	long long a,id;
};
node c[1000005];
bool cmp(node l1,node l2)
{
	return l1.a<l2.a;
}
ll g[1000005],len,s[1000005],k[1000005],kk[1000005];
int main()
{
//	freopen("std.in","r",stdin);
//	freopen("baoli.out","w",stdout);
	cin>>n>>m>>p;
	for(int i=1;i<=n;i++) scanf("%lld",&c[i].a),c[i].id=i;
	x=c[p].a;
	sort(c+1,c+n+1,cmp);
	wz=n+1;
	for(int i=1;i<=n;i++)
	{
		if(c[i].a>=0)
		{
			wz=i;
			break;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(c[i].a<0&&c[j].a>=0)
			{
				int lmt=m;
				if(c[i].a<=x&&x<=c[j].a) lmt+=5;
				if(abs(c[i].a)*2+abs(c[j].a)*2<=lmt)
				{
					if(ans<j-i+1)
					{
						ans=j-i+1;
						cnt=1;
						k1[cnt]=i,k2[cnt]=j;
					}
					if(ans==j-i+1)
					{
						cnt++;
						k1[cnt]=i,k2[cnt]=j;
					}
				}
			}
		}
	}
	for(int i=1;i<=wz-1;i++)
	{
		ll u=0;
		if(x<0&&c[i].a<=x) u=5;
		if(abs(c[i].a)*2<=m+u)
		{
			int j=wz-1;
			if(ans<j-i+1)
					{
						ans=j-i+1;
						cnt=1;
						k1[cnt]=i,k2[cnt]=j;
					}
					if(ans==j-i+1)
					{
						cnt++;
						k1[cnt]=i,k2[cnt]=j;
					}
			break;
		}
	}
	for(int i=n;i>=wz;i--)
	{
		ll u=0;
		if(x>=0&&c[i].a>=x) u=5;
		if(abs(c[i].a)*2<=m+u)
		{
			ll j=i;
			i=wz;
			if(ans<j-i+1)
					{
						ans=j-i+1;
						cnt=1;
						k1[cnt]=i,k2[cnt]=j;
					}
					if(ans==j-i+1)
					{
						cnt++;
						k1[cnt]=i,k2[cnt]=j;
					}
			break;
		}
	}
	cout<<ans<<endl;
if(ans==0)
 return 0;
for(int i=1;i<=cnt;i++)
	{
	//	cout<<k1[i]<<" "<<k2[i]<<endl;
		len=0;
		for(int j=k1[i];j<=k2[i];j++)
		{
			len++;
			g[len]=c[j].id;
			k[len]=c[j].id;
		}
		sort(g+1,g+len+1);
		if(i==1)
		{
			for(int i=1;i<=len;i++) s[i]=g[i];
				for(int i=1;i<=len;i++) kk[i]=k[i];
		}else
		{
			bool p=false;
			for(int i=1;i<=len;i++)
			{
				if(g[i]<s[i]) 
				
				{p=true;break;
				}
				if(s[i]<g[i]) break;
			}
			if(p)
			{
				for(int i=1;i<=len;i++) s[i]=g[i];
				for(int i=1;i<=len;i++) kk[i]=k[i];
			}
		}
	}
	for(int i=1;i<=ans;i++) cout<<kk[i]<<" ";
	return 0;
}

这为什么sub2错了,3,4,对了

2024/5/13 19:05
加载中...