Submission
Status:
[PP][PP][P]
Score: 100
User: hmmm
Problemset: ล้อมรั้ว
Language: cpp
Time: 0.023 second
Submitted On: 2025-03-16 14:07:26
#include<bits/stdc++.h>
using namespace std;
using pii=array<int,4>;
const int N=355,M=2e5+5;
int a[N][N];
pii dp[M],qs[M];
bool chk[M];
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n,m,t;
cin >> n >> m >> t;
for(int i=0;i<M;i++){
dp[i][0]=1e9;
dp[i][1]=1e9;
}
int mx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
mx=max(mx,a[i][j]);
chk[a[i][j]]=true;
// if(a[i][j]!=0){
dp[a[i][j]][0]=min(dp[a[i][j]][0],i);
dp[a[i][j]][1]=min(dp[a[i][j]][1],j);
dp[a[i][j]][2]=max(dp[a[i][j]][2],i);
dp[a[i][j]][3]=max(dp[a[i][j]][3],j);
// }
}
}
for(int i=0;i<4;i++){
qs[mx][i]=dp[mx][i];
}
for(int i=mx-1;i>=0;i--){
qs[i][0]=min(qs[i+1][0],dp[i][0]);
qs[i][1]=min(qs[i+1][1],dp[i][1]);
qs[i][2]=max(qs[i+1][2],dp[i][2]);
qs[i][3]=max(qs[i+1][3],dp[i][3]);
}
while(t--){
int x,y;
cin >> x >> y;
if(x==1){
if(chk[y]==false) cout << "0\n";
else cout << 2*(dp[y][3]-dp[y][1]+1)+2*(dp[y][2]-dp[y][0]+1) << "\n";
// cout << dp[y][0] << ' ' << dp[y][1] << ' ' << dp[y][2] << ' ' << dp[y][3] << ' ' << "--\n";
}
else {
if(y>mx) cout << "0\n";
else cout << 2*(qs[y][3]-qs[y][1]+1)+2*(qs[y][2]-qs[y][0]+1) << "\n";
// cout << qs[y][0] << ' ' << qs[y][1] << ' ' << qs[y][2] << ' ' << qs[y][3] << ' ' << "\n";
}
}
}