Rikka with Candies HDU 6085

其实这种中档的问题,要是好好思考的话还是可以想出来的就是要深入的思考,实在不行就改变一下思路。

这个书写bitset的模板还是应该好好的记住的,真的感觉不错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<bitset>
#include<set>
#include<vector>
 
using namespace std;
const int N=6e4+32;
vector<int>G[N];
set<int>S;
int vis[N],a[N],b[N],res[N];
long long dig[N][50];
long long ans[N];
void inist(int r)
{
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j*j<=i;j++)
        {
            if(i%j) continue;
            if(i%j==0)
            {
                G[i].push_back(j);
                if(i/j!=j) G[i].push_back(i/j);
            }
        }
        //sort(G[i].begin(),G[i].end());
    }
 
}
int main()
{
    int T;
    scanf("%d",&T);
    inist(N-2);
    while(T--)
    {
        S.clear();
        int n,m,q;
        int maxn_date=0;
        scanf("%d%d%d",&n,&m,&q);
        memset(ans,0,sizeof(ans));
        memset(dig,0,sizeof(dig));
        memset(res,0,sizeof(res));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            vis[a[i]]=1;
            maxn_date=max(maxn_date,a[i]);
        }
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&b[i]);
            S.insert(b[i]);
        }
        sort(b+1,b+1+m);
        for(int i=1;i<N-100;i++)
        {
            long long su=0;
            for(int j=0;j<32;j++)
            {
                su=su*2+vis[i+j];
                dig[i][j+1]=su;
                dig[i][j+1]<<=(31-j);
            }
        }
 
        for(int i=1;i<=maxn_date;i++)
        {
            int sz=G[i].size();
            for(int j=0;j<sz;j++)
            {
                int x=G[i][j];
                if(!S.count(x))continue;
                int L=0,R=x-1;
                while(L<=R)
                {
                    int d=L/32;
                    if(i+L>N-100) break;
                    if(L+31<=R)
                    {
                        ans[d]^=dig[i+L][32];
                        L+=32;
                    }
                    else
                    {
                        ans[d]^=dig[i+L][R-L+1];
                        L=R+1;
                    }
                }
            }
        }
        for(int i=0;i*32<=5e4+50;i++)
        {
            int j=(i+1)*32-1;
            int t=32;
            while(t--)
            {
                res[j]=ans[i]&1; j--;
                ans[i]>>=1;
            }
        }
        for(int i=1;i<=n;i++)
        {
           int  x=a[i];
           res[x]+=m-(upper_bound(b+1,b+1+m,x)-(b+1));
        }
        while(q--)
        {
            int k;
            scanf("%d",&k);
            printf("%d\n",res[k]&1);
        }
    }
}

  

posted @   Heilce  阅读(392)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理
点击右上角即可分享
微信分享提示