求调
查看原帖
求调
1285950
4041nofoundGeoge楼主2024/10/26 17:02
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5,M=100;
int f[M+5][N],g[M+5][N],h[M+5][N],a[N],l[N],r[N],last[N];
int tmp;
int main(){
	int T;
	cin>>T;
	while(T--){
		int n,k,q,s;
		cin>>n>>k>>q;
		for(int i=1;i<=n;i++){
			cin>>s;
			l[i]=r[i-1]+1;
			r[i]=r[i-1]+s;
			for(int j=l[i];j<=r[i];j++)cin>>a[i];
		}
		memset(g,0,sizeof(g));
		g[0][1]=1;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				int L=l[j],cnt=0;
				f[i][L]=0;
				for(int t=l[j]+1;t<=r[j];t++){
					if(t-L+1>k){
						cnt-=g[i-1][a[L]]-f[i-1][L];
						L++;
					}
					cnt+=g[i-1][a[t-1]]-f[i-1][t-1];
					f[i][t]=cnt?1:0;
					g[i][a[t]]+=f[i][t];
				}
				for(int t=l[j];t<=r[j];t++){
					if(last[a[t]])f[i][t]+=f[i][last[a[t]]];
					last[a[t]]=t;
				}
				for(int t=l[j];t<=r[j];t++){
					last[a[t]]=0;
				}
				for(int t=r[j];t>=l[j];t--){
					if(last[a[t]])f[i][t]=f[i][last[a[t]]];
					last[a[t]]=t;
				}
				for(int t=l[j];t<=r[j];t++)last[a[t]]=0;
			}
			int x,y;
			while(q-->0){
				tmp++;
				cin>>x>>y;
				cout<<(g[x][y]?1:0)<<endl;
			}
		}
	}
	return 0;
}
2024/10/26 17:02
加载中...