# Table - Bảng số
Cách tiếp thu tốt nhất là tự đọc code :>
## Subtask 1
Nhận thấy bảng chỉ có 1 cột và số truy vấn không lớn nên mới truy vấn ta sẽ duyệt tất cả các $(u,v)$
```cpp=
namespace Subtask1{
int a[101];
void solve(){
for(int j=1;j<=n;j++) cin>>a[j];
int k;cin>>k;
while(k--)
{
int u,v,mi=3,ma=0,res=0;cin>>u>>v;
for(int i=u;i<=v;i++)
{
mi=3;ma=0;
for(int j=i;j<=v;j++)
{
_min(mi,a[j]),_max(ma,a[j]);
if (ma-mi>1) break;
_max(res,j-i+1);
}
}
cout<<res<<"\n";
}
}
}
```
## Subtask 2
```cpp=
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
if (fopen(name".inp","r"))
{
freopen(name".inp","r",stdin);
freopen(name".out","w+",stdout);
}
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
stack<int> s;
dp[i][j]=dp[i][j-1];
for(int k=1;k<=m;k++)
{
h[k]=(a[j][k]<=1)?h[k]+1:0;
while (s.size() and h[s.top()]>=h[k]) s.pop();
l[k]=(s.size()?s.top()+1:1);
s.push(k);
}
while (s.size()) s.pop();
for(int k=m;k>0;k--)
{
while (s.size() and h[s.top()]>=h[k]) s.pop();
r[k]=(s.size()?s.top()-1:m);
s.push(k);
_max(dp[i][j],h[k]*(r[k]-l[k]+1));
}
}
memset(h,0,sizeof(h));
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
stack<int> s;
_max(dp[i][j],dp[i][j-1]);
for(int k=1;k<=m;k++)
{
h[k]=(a[j][k]>=1)?h[k]+1:0;
while (s.size() and h[s.top()]>=h[k]) s.pop();
l[k]=(s.size()?s.top()+1:1);
s.push(k);
}
while (s.size()) s.pop();
for(int k=m;k>0;k--)
{
while (s.size() and h[s.top()]>=h[k]) s.pop();
r[k]=(s.size()?s.top()-1:m);
s.push(k);
_max(dp[i][j],h[k]*(r[k]-l[k]+1));
}
}
memset(h,0,sizeof(h));
}
int q;cin>>q;
while (q--)
{
int u,v;cin>>u>>v;
cout<<dp[u][v]<<"\n";
}
}
```