Submission #1214755

#TimeUsernameProblemLanguageResultExecution timeMemory
1214755NAMINAbduction 2 (JOI17_abduction2)C++20
13 / 100
5092 ms640 KiB
#include <bits/stdc++.h>

#define ll long long
#define endl "\n"

using namespace std;

int N,M,Q;
vector<int> a,b;
vector<int> depi{0,0,-1,1};
vector<int> depj{1,-1,0,0};

bool ok(int curi,int curj){
	return (curi < N && curi >= 0 && curj < M && curj >= 0);
}

ll dfs(int curi,int curj,int di,int dj){
	if(di!=0){
		if(a[curi]<b[curj]){
			if(ok(curi+di,curj))
				return dfs(curi+di,curj,di,dj)+1;
			else
				return 0;
		}
		else{
			ll res = 0;
			if(ok(curi,curj+1))
				res = max(res,dfs(curi,curj+1,0,1)+1);
			if(ok(curi,curj-1))
				res = max(res,dfs(curi,curj-1,0,-1)+1);
			return res;
		}
	}
	else{
		if(a[curi]>b[curj]){
			if(ok(curi,curj+dj))
				return dfs(curi,curj+dj,di,dj)+1;
			else
				return 0;
		}
		else{
			ll res = 0;
			if(ok(curi+1,curj))
				res = max(res,dfs(curi+1,curj,1,0)+1);
			if(ok(curi-1,curj))
				res = max(res,dfs(curi-1,curj,-1,0)+1);
			return res;
		}
	}
}

void solve(){
	cin >> N >> M >> Q;
	a.resize(N),b.resize(M);
	for(int i=0;i<N;i++)
		cin >> a[i];
	for(int i=0;i<M;i++)
		cin >> b[i];

	while(Q--){
		int curi,curj;
		cin >> curi >> curj;
		curi--,curj--;
		ll ans = 0;
		for(int d=0;d<4;d++){
			if(curi+depi[d] >= N || curi+depi[d] < 0
					|| curj+depj[d] >= M || curj+depj[d] < 0)
				continue;
			ans = max(ans,dfs(curi+depi[d],curj+depj[d],depi[d],depj[d])+1);
		}
		cout << ans << endl;
	}
}	

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

	int t = 1;
	//cin >> t;
 	while(t--){
		solve();
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...