记录编号 607016 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 4084.魔法卡片 最终得分 100
用户昵称 Gravatar梦那边的美好CE 是否通过 通过
代码语言 C++ 运行时间 8.848 s
提交时间 2025-10-04 21:05:52 内存使用 22.28 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MS = 1<<20;
const int N = 1000010;
int n,m,q,ans[N][21],sum,tot[21][MS+500],num,now,ql,qr,S,mn,p;
queue<int>qu[30];
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    freopen("magic.in", "r", stdin);freopen("magic.out", "w", stdout);
    cin>>n>>m>>q;
    int MM = m+1;
    vector<char> front((n+1)*MM, 0);
    for(int i=1;i<=m;++i)sum+=(i*i);
    for(int i=1;i<=n;++i){
        int basei = i * MM;
        cin>>num;
        for(int j=1;j<=num;++j){
            cin>>p;
            front[basei + p]=1;
        }
        for(int j=1;j<=m;++j){
            S=0;
            int mu=min(i,20LL);
            for(int u=1;u<=mu;++u){
                int card = i-u+1;
                int basec = card * MM;
                if(front[basec + j]==0)S|=(1LL<<(u-1));
                if(!tot[u][S])qu[u].push(S);
                tot[u][S]+=j*j;
            }
        }
        int mu=min(i,20LL);
        for(int len=1;len<=mu;++len){
            int distinct=qu[len].size();
            mn=1LL<<60;
            while(!qu[len].empty()){
                now=qu[len].front();qu[len].pop();
                mn=min(mn,tot[len][now]);
                tot[len][now]=0;
            }
            if(distinct<(1LL<<len)){
                ans[i][len]=sum;
            }else{
                ans[i][len]=sum-mn;
            }
        }
    }
    for(int i=1;i<=q;++i){
        cin>>ql>>qr;
        int len=qr-ql+1;
        if(len>=20)cout<<sum<<'\n';
        else cout<<ans[qr][len]<<'\n';
    }
    return 0;
}