Submission
Status:
[-S][-S][-]
Score: 0
User: Ecir
Problemset: ล้อมรั้ว
Language: cpp
Time: 0.047 second
Submitted On: 2025-03-16 21:00:25
#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 mX=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;
mX=max(mX,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(v>mX){
cout << 0 << "\n";
continue;
}
if(u==1 && 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;
}