Submission

Status:
[-S][-S][-]

Score: 0

User: Ecir

Problemset: ล้อมรั้ว

Language: cpp

Time: 0.069 second

Submitted On: 2025-03-16 20:58:08

#include <bits/stdc++.h>
using namespace std;
using ll=long long int;
#define twod array<ll,2>
int pos[200009][2][2];
vector<vector<int>> dpmn(200009,vector<int>(2,INT_MAX));
vector<vector<int>> dpmx(200009,vector<int>(2,0));
int main(){
  ios::sync_with_stdio(0);cin.tie(0);
  int sy,sx,n;cin >> sy >> sx >> n;
  for(int k=0;k<=200000;k++){
    pos[k][0][0]=INT_MAX;
    pos[k][0][1]=INT_MAX;
  }
  for(int i=1;i<=sy;i++){
    for(int j=1;j<=sx;j++){
      int z;cin >> z;
        pos[z][0][0]=min(pos[z][0][0],i);
      	pos[z][0][1]=min(pos[z][0][1],j);
      	pos[z][1][0]=max(pos[z][1][0],i);
      	pos[z][1][1]=max(pos[z][1][1],j);
    }
  }
  for(int i=200000;i>=1;i--){
    dpmn[i][0]=min(dpmn[i+1][0],pos[i][0][0]);
    dpmn[i][1]=min(dpmn[i+1][1],pos[i][0][1]);
    dpmx[i][0]=max(dpmx[i+1][0],pos[i][1][0]);
    dpmx[i][1]=max(dpmx[i+1][1],pos[i][1][1]);
  }
  while(n--){
    int u,v;cin >> u >> v;
    if(pos[v][0][0]==INT_MAX || pos[v][1][0]==0){
      cout << 0 << "\n";
      continue;
    }
    // if(u==1){
    //   cout << v << " " << pos[v][0][0] << "," << pos[v][0][1] << " " << pos[v][1][0] << "," << pos[v][1][1] << "\n";
    // }
    if(u==1) cout << (pos[v][1][0]-pos[v][0][0]+1)*2+(pos[v][1][1]-pos[v][0][1]+1)*2 << "\n";
    else cout << (dpmx[v][0]-dpmn[v][0]+1)*2+(dpmx[v][1]-dpmn[v][1]+1)*2 << "\n";
  }
  return 0;
}