史山求卡常
查看原帖
史山求卡常
578004
02Ljh楼主2024/10/31 23:24

写了个又慢又丑的 O(T(q+rl))O(T(q+r\sum l)) 的做法 本地大样例 1.5s,luogu死活60pts过不去

// 前を向け 終わらないさ 
// 一生僕らは生きて征け
#include <bits/stdc++.h>
//#include<ext/pb_ds/hash.policy.hpp>
//using namespace __gnu_pbds;
using namespace std;
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define ll long long
#define WA cerr<<"meowww!\n";
#define eps 1e-5
#define none -1145141919
#define pii pair<int,int>
#define Y cout<<"Yes\n"
#define N cout<<"No\n"
#define H cout<<"\n";
#define WH cerr<<"\n";
#define fi first
#define se second
#define C continue;
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define Rof(i,a,b) for(int i=(a);i>=(b);--i)
#define ROF(i,a,b) for(int i=(a);i>(b);--i)
#define G(i,p) for(auto i:pq[p])
#define VG(i,p) for(int i=0;i<pq[p].size();i++)
#define pb push_back
#define pk pop_back
#define WR(x) cerr<<(x)<<"\n";
#define MAXN 200019
#define K cout<<" "
#define int long long
//const int MOD=;
//void MD(int &x) { if(x<0) x+=MOD; if(x>=MOD) x-=MOD; return ; }
void Umn(int &x,int y) { if(x>y) x=y; return ; }
void Umx(int &x,int y) { if(x<y) x=y; return ; }
int rd() { int x; cin>>x; return x; }
void wr(int x) { cout<<x; return ; }
int dp[102][MAXN];
int col[MAXN];int n,k,q; vector<vector<int> > a,qz,qqz;int m=0;
ll cnt=0;
int mxc=0;
void init() { 
	For(i,1,n) For(j,0,a[i][0]+1) {qz[i][j]=qqz[i][j];qqz[i][j]=0;}
	For(i,1,n)For(j,1,a[i][0]){int tp=a[i][j];qz[i][j+1]+=col[tp];if(j+k+1<=a[i][0])qz[i][j+k+1]-=col[tp];}
	For(i,1,n)For(j,1,a[i][0]){qz[i][j]+=qz[i][j-1];}
	For(i,0,mxc)col[i]=0;
 	//For(i,1,n){For(j,1,a[i][0])cerr<<qz[i][j]<<" "; WH;} WH;
	//WR("T");
	return ;
}
int clc[MAXN],bx[MAXN];
 main()
{
	//freopen("in2.in","r",stdin);
    // freopen("chain6.in","r",stdin);
    // freopen("out.txt","w",stdout);
    //ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int _;cin>>_;
	//double st=clock();
	int allc=0;
    while(_--)
    {
    	a.clear();
    	cnt=0;
    	qz.clear();qqz.clear();
    	For(i,0,100)For(j,0,mxc+1)dp[i][j]=0; For(i,0,mxc+1)col[i]=0; mxc=0; m=0;
    	cin>>n>>k>>q; if(a.size()<n+1){a.resize(n+1); qz.resize(n+1);qqz.resize(n+1);} --k;
    	For(i,1,n) { int tp;cin>>tp;Umx(m,tp);if(a[i].size()<tp+2){a[i].resize(tp+2);qz[i].resize(tp+2,0);qqz[i].resize(tp+2,0);} a[i][0]=tp; 
			For(j,1,tp) { cin>>a[i][j];Umx(mxc,a[i][j]); } }
    	col[1]++;//qqz.clear();qz.clear();
    	For(p,1,100)
    	{
    		init();
    		For(i,1,n) {++allc;For(j,1,a[i][0]) { 
					int tp=qz[i][j],nc=a[i][j]; dp[p][nc]+=tp; col[nc]+=tp;
					if(clc[nc]!=allc){clc[nc]=allc;bx[nc]=0;}bx[nc]+=tp;
				}
				For(j,1,a[i][0]) { qqz[i][j+1]-=bx[a[i][j]];if(j+k+1<=a[i][0])qqz[i][j+k+1]+=bx[a[i][j]]; }
			}
    	}
    	For(i,1,q){int r,c;cin>>r>>c;if(dp[r][c])puts("1");else puts("0");}
		//cerr<<fixed<<setprecision(20)<<(clock()-st)/CLOCKS_PER_SEC<<"\n";//st=clock();
    }
    return 0;
}
2024/10/31 23:24
加载中...