水题
/* 按列扫描一次矩阵,每个行向上最长sort长度即可 */ #include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 1000005 int q,l,r,n,m,a[maxn],len[maxn]; inline int H(int i,int j){return i*m+j;} int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[H(i,j)]); for(int i=1;i<=n;i++) len[i]=1; for(int j=1;j<=m;j++){ int tmp=0; for(int i=1;i<=n;i++){ if(a[H(i,j)]>=a[H(i-1,j)]) tmp++,len[i]=max(tmp,len[i]); else tmp=1; } } scanf("%d",&q); while(q--){ scanf("%d%d",&l,&r); if(len[r]>=r-l+1) puts("Yes"); else puts("No"); } }