Submission

Status:
[PP][PP][P]

Score: 100

User: ftm

Problemset: ล้อมรั้ว

Language: cpp

Time: 0.019 second

Submitted On: 2025-03-15 23:21:26

#include<bits/stdc++.h>
using namespace std;
#define f(i,a,b,c) for(int i=a;i<=b;i+=c)
#define r(i,a,b,c) for(int i=a;i>=b;i-=c)
#define fi first
#define se second
#define pb push_back
using ll=long long int;
using pii=pair<int,int>;
const int N=1e6;
const int M=1e9+7;
array<int,4> mp[200001];
int a[355][355];
array<int,4> b;
int ans[200001];
int dp[200005];

int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	int h,w,q;cin>>h>>w>>q;
	f(i,1,200000,1){
		mp[i][0]=500;
		mp[i][1]=500;
		b[0]=500;
		b[1]=500;
	}
	f(i,1,h,1){
		f(j,1,w,1){
			cin>>a[i][j];
			mp[a[i][j]][0]=min(mp[a[i][j]][0],i);
			mp[a[i][j]][1]=min(mp[a[i][j]][1],j);
			mp[a[i][j]][2]=max(mp[a[i][j]][2],i);
			mp[a[i][j]][3]=max(mp[a[i][j]][3],j);
		}
	}
	r(i,200000,0,1){
		ans[i]=2*(mp[i][2]+mp[i][3]-mp[i][0]-mp[i][1]+2);
		b[0]=min(b[0],mp[i][0]);
		b[1]=min(b[1],mp[i][1]);
		b[2]=max(b[2],mp[i][2]);
		b[3]=max(b[3],mp[i][3]);
		if(ans[i]<0) ans[i]=0;
		dp[i]=2*(b[2]+b[3]-b[0]-b[1]+2);
		if(dp[i]<0) dp[i]=0;
	}
	while(q--){
		int x,v;cin>>x>>v;
		if(x==1) cout<<ans[v]<<"\n";
		else cout<<dp[v]<<"\n";
	}
}
/*
1 10 4
0 1 0 2 1 0 3 0 2 4
1 1
1 2
2 2
2 3

///////////////
5 6 6
0 0 0 2 0 1
0 5 0 0 1 1
0 0 7 5 2 0
0 5 0 0 0 0
0 0 3 0 6 0
1 5
2 2
2 7
1 1
1 4
2 10

*/