提交时间:2026-06-06 15:25:03

运行 ID: 41978

#include<bits/stdc++.h> #define low(x) ((x)&(-x)) #define int long long #define y0 jp8akioi #define y1 jbhakioi #define yn baka24akioi #define fls fflush(stdout) using namespace std; inline void read(int &x){ x=0;char c=getchar();bool neg=0; for(;!isdigit(c);c=getchar())neg=(c=='-'); for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48); if(neg)x=-x; } inline void read(string &x){ x="";char c=getchar(); for(;isspace(c);c=getchar()); for(;!isspace(c)&&c!=EOF;c=getchar())x+=c; } inline void read(char &x){ x=getchar(); while(isspace(x))x=getchar(); } template<typename... T> inline void read(T&... x){ (read(x),...); } template<typename T> inline void chmx(T &x,T const &y){ (x<y)?x=y:0ll; } template<typename T> inline void chmn(T &x,T const &y){ (x>y)?x=y:0ll; } int n,m,a[5][100005],b[5][100005],f[18][5][100005]; int calc(int x,int y){ int ans=0; bool ok=0; for(int i=0;i<m;i++){ if(b[i][x]<=b[i][y])return 1; if(f[17][i][x]<=b[i][y])ok=1; } if(!ok)return-1; array<int,5>pos; for(int i=0;i<m;i++)pos[i]=b[i][x]; for(int i=17;i>=0;i--){ array<int,5>nxt=pos; for(int j=0;j<m;j++){ for(int k=0;k<m;k++){ chmn(nxt[k],f[i][k][a[j][pos[j]]]); } } bool ok=0; for(int j=0;j<m;j++)if(nxt[j]<=b[j][y])ok=1; if(ok)continue; pos=nxt; ans+=(1ll<<i); } return ans+2; } void slv(){ read(n,m); for(int i=0;i<m;i++)for(int j=1;j<=n;j++)read(a[i][j]); for(int i=0;i<m;i++)for(int j=1;j<=n;j++)b[i][a[i][j]]=j; memset(f,0x3f,sizeof f); for(int i=0;i<m;i++){ array<int,5>pos; pos.fill(1e9); for(int j=n;j>=1;j--){ for(int k=0;k<m;k++){ chmn(pos[k],b[k][a[i][j]]); chmn(f[0][k][a[i][j]],pos[k]); } } } // for(int i=0;i<m;i++){ // for(int j=1;j<=n;j++)cout<<f[0][i][j]<<" \n"[j==n]; // } for(int i=1;i<18;i++){ for(int j=0;j<m;j++){ for(int k=1;k<=n;k++){ for(int l=0;l<m;l++){ chmn(f[i][j][k],f[i-1][j][a[l][f[i-1][l][k]]]); } } } } int q;read(q); while(q--){ int x,y;read(x,y); cout<<calc(x,y)<<'\n' } } signed main(){ slv(); return 0; }