70分,最后六个点TLE,大佬们看看这个做法有没有前途
查看原帖
70分,最后六个点TLE,大佬们看看这个做法有没有前途
757101
junee楼主2023/12/4 16:31
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int C,n,m,q,a[N],b[N],x[N],y[N];
int k1,k2,p,v,f;
bool flag;
void init(){
	for(int i=1;i<=n;i++)a[i]=x[i];
	for(int i=1;i<=m;i++)b[i]=y[i]; 
}
bool check(){
	int i=1,j=1;
	if(a[1]>b[1]&&a[n]>b[m])f=1;
	else if(a[1]<b[1]&&a[n]<b[m])f=2;
	else return false;
	while(i<=n&&j<=m){
		if(f==1){
			if(a[i]>b[j]){
				while(a[i]>b[j]){
					if(j==m)break;
					j++;
				}
			}else{
				while(a[i]<=b[j]){
					if(j==0)break;
					j--;
				}
			}
			i++;
			if(j==0)return false;
		}else{
			if(a[i]<b[j]){
				while(a[i]<b[j]){
					if(i==n)break;
					i++;
				}
			}else{
				while(a[i]>=b[j]){
					if(i==0)break;
					i--;
				}
			}
			j++;
			if(i==0)return false;
		}
	} 
	if(f==1&&i==n+1&&j==m)return true;
	if(f==2&&i==n&&j==m+1)return true;
	return false;
}
int main(){
	cin>>C>>n>>m>>q;
	for(int i=1;i<=n;i++)cin>>x[i];
	for(int i=1;i<=m;i++)cin>>y[i];
	init();
	if(check())cout<<"1";
	else cout<<"0";
	while(q--){
		init();
		cin>>k1>>k2;
		while(k1--){
			cin>>p>>v;
			a[p]=v;
		}
		while(k2--){
			cin>>p>>v;
			b[p]=v;
		}
		if(check())cout<<"1";
		else cout<<"0";
	}
	return 0;
} 
2023/12/4 16:31
加载中...