暴力代码,数组开得很大,但不知道怎么就RE了qwq
查看原帖
暴力代码,数组开得很大,但不知道怎么就RE了qwq
719843
lizhuorong楼主2024/8/22 09:38

评测状态

#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans=0;
int n,q;
int a[5000005],d[5000005],s[5000005];
void qwq(int x,int y,int num){//开搜
	if(num>q||d[num]>(y-x+1)){//如果当前所剩位置不够,返回
		ans=max(ans,num-1);
		return;
	}
	else{
		bool flag=true;
		int sum1=0;
		for(int i=x;i<(x+d[num]);i++){
			if(a[i]<s[num]){
				flag=false;
				sum1++;
			}
		}
		int sum=sum1;
		if(!flag){
			flag=true;
			for(int i=0;(i+x+d[num])<y;i++){
				if(a[i+x]<s[num]) sum--;
				if(a[i+x+d[num]]<s[num]) sum++;
				if(sum==0){
					flag=false;
					qwq(x+i+d[num]+1,y,num+1);
					break;
				} 
			}
			if(flag) ans=max(ans,num-1);
		}
		else qwq(x+d[num],y,num+1);
		flag=true;
		for(int i=y;i>(y-d[num]);i--){
			if(a[i]<s[num]) flag=false;
		}
		sum=sum1;
		if(!flag){
			flag=true;
			for(int i=0;(y-i-d[num])>x;i--){
				if(a[y-i]<s[num]) sum--;
				if(a[y-i-d[num]]<s[num]) sum++;
				if(sum==0){
					flag=false;
					qwq(x,y-i-d[num]-1,num+1);
					break;
				} 
			}
			if(flag) ans=max(ans,num-1);
		}
		else qwq(x,y-d[num],num+1);
	}
}
signed main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=q;i++){
		scanf("%d%d",&d[i],&s[i]);
	}
	qwq(1,n,1);//起点、终点和第几次操作 
	cout<<ans;
}
2024/8/22 09:38
加载中...