#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef unsigned ud; typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vec; typedef priority_queue pq; #define pb push_back #define ph push #define fi first #define se second const int M=1005; ud dp[M][M],sum[M<<1]; ud A[M][M],a[M][M],x[M][M],b[M][M],y[M][M],pos[M],stk[M]; inline void Max(int &a,int b){if(ab||a==-1)a=b;} templatevoid rd(T &a){ a=0;char c; while(c=getchar(),!isdigit(c)); do a=a*10+(c^48); while(c=getchar(),isdigit(c)); } templatevoid nt(T x){ if(!x)return; nt(x/10); putchar(48+x%10); } templatevoid pt(T x){ if(!x)putchar('0'); else nt(x); } inline int Mod_Pow(int x,int a,int mod){ int res=1; for(int i=0;(1ll<>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)rd(A[i][j]); ////////////////////////////////////////////////////////////////////////////////////////////////////// pos[0]=0; for(int i=1;i<=n;++i){ int top=0; for(int j=1;j<=m;++j){ for(;top&&stk[top]>A[i][j];)top--; a[i][j]=j-pos[top]; stk[++top]=A[i][j]; pos[top]=j; } } ////////////////////////////////////////////////////////////////////////////////////////////////////// pos[0]=0; for(int i=1;i<=m;++i){ int top=0; for(int j=1;j<=n;++j){ for(;top&&stk[top]A[i][j];)top--; x[i][j]=pos[top]-j; stk[++top]=A[i][j]; pos[top]=j; } } ////////////////////////////////////////////////////////////////////////////////////////////////////// pos[0]=n+1; for(int i=1;i<=m;++i){ int top=0; for(int j=n;j;--j){ for(;top&&stk[top]>_;_--;)gao(); }