蒟蒻的暴力,一直显示运行时错误,求大佬调错。
查看原帖
蒟蒻的暴力,一直显示运行时错误,求大佬调错。
406124
Yzj2010小号楼主2022/9/13 20:56
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T,n,k,x,y,ans=0;
int a[1000001],minn[1000001],maxx[1000001],f[1000001];
inline bool my(int w)
{
    return (maxx[f[w]]>0)?false:true;

}
signed main()
{
	cin>>T>>n;
	for(int i=1;i<=n;i++) cin>>a[i],minn[i]=maxx[n-i+1]=a[i],f[i]=i;
    int l1=1,l2=1;
    while(maxx[l1]-minn[l2]>minn[l2+1]||((n+2==l2+l1)||(n+1==l2+l1)||(n==l2+l1)))
	{
        maxx[l1]-=minn[l2];
        minn[n-l1+1]=maxx[l1];
		minn[l2]=0;
        maxx[n-l2+1]=0;
        l2++;
		int j=l1;
		while(maxx[j+1]>maxx[j])
		{
			swap(maxx[j],maxx[j+1]);
            swap(minn[n-j+1],minn[n-j+2]);
            swap(f[j],f[j+1]);
			j++;
		}
	}
	cout<<n-l2+1<<endl;
	while(--T)
	{
		cin>>k;
		while(k--)
		{
			int x,y;
			cin>>x>>y;
			if(my(x))
            {
                l1--;
                maxx[l1]=y;
                l2--;
                minn[l2]=y;
                int ii=l1;
                while(maxx[ii]<=maxx[ii+1])
                    swap(maxx[ii],maxx[ii+1]),ii++;
                ii=l2;
                while(minn[ii]>=minn[ii+1])
                    swap(minn[ii],minn[ii+1]),ii++;
            }
            else
            {
                maxx[f[x]]=0,minn[f[n-x+1]]=0;
                for(int i=n;i>=l1+1;i--) maxx[i]=maxx[i-1];
                for(int i=n;i>=l2+1;i--) minn[i]=minn[i-1];
                maxx[l1]=y;
                minn[l2]=y;
                int ii=l1;
                while(maxx[ii]<=maxx[ii+1])
                    swap(maxx[ii],maxx[ii+1]),ii++;
                ii=l2;
                while(minn[ii]>=minn[ii+1])
                    swap(minn[ii],minn[ii+1]),ii++;                
            }
		}
        while(maxx[l1]-minn[l2]>minn[l2+1]||((n+2==l2+l1)||(n+1==l2+l1)||(n==l2+l1)))
	    {
            maxx[l1]-=minn[l2];
            minn[n-l1+1]=maxx[l1];
	    	minn[l2]=0;
            maxx[n-l2+1]=0;
            l2++;
	    	int j=l1;
	    	while(maxx[j+1]>maxx[j])
	    	{
		    	swap(maxx[j],maxx[j+1]);
                swap(minn[n-j+1],minn[n-j+2]);
	    		j++;
	    	}
	    }		
	    cout<<n-l2+1<<endl;		
	}
	return 0;
}
2022/9/13 20:56
加载中...