• [cf1097F]Alex and a TV Show


    注意到仅关心于每种数个数的奇偶性,并且以此法操作不影响结果

    对其使用bitset维护,即可在$o(frac{v}{omega})$的复杂度内完成操作1,2和4

    对于操作3,即是一个经典的$gcd$卷积,记$S_{i}$为第$i$个集合对应的bitset(下标范围为$[1,v]$),那么构造倍数变换$FT(S)_{i}=igoplus_{imid j}S_{j}$,则有$FT(S_{z})=FT(S_{x})and FT(S_{y})$(指对应位取and)

    (根据莫比乌斯反演,$FT$的逆变换$FT^{-1}$即为$FT^{-1}(S)_{i}=igoplus_{jmid i}mu(frac{i}{j})S_{j}$)

    根据调和级数,求$FT(S)_{i}$的复杂度为$o(vlog v)$,但由于没有利用bitset的操作,无法通过

    注意到操作1和操作4都是单点修改和查询,因此不妨改为维护$FT(S)$

    此时,操作1即枚举所有约数,可以暴力或预处理;操作2和操作3即异或和$and$;操作4即求乘上所有$mu$非0的数位置上的异或和,预处理后即可通过$and$和$count$实现

    综上,总复杂度为$o(frac{qv}{omega})$,可以通过

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define N 100005
     4 #define V 7001
     5 bitset<V>dv[V],mul[V],bt[N];
     6 int n,m,p,x,y,z,mu[V];
     7 int main(){
     8     for(int i=1;i<V;i++){
     9         mu[i]=1;
    10         for(int j=2;j*j<=i;j++)
    11             if (i%(j*j)==0)mu[i]=0;
    12     }
    13     for(int i=1;i<V;i++)
    14         for(int j=i;j<V;j+=i){
    15             dv[j][i]=1;
    16             mul[i][j]=mu[j/i];
    17         }
    18     scanf("%d%d",&n,&m);
    19     for(int i=1;i<=m;i++){
    20         scanf("%d%d%d",&p,&x,&y);
    21         if (p==1)bt[x]=dv[y];
    22         if (p==2){
    23             scanf("%d",&z);
    24             bt[x]=(bt[y]^bt[z]);
    25         }
    26         if (p==3){
    27             scanf("%d",&z);
    28             bt[x]=(bt[y]&bt[z]);
    29         }
    30         if (p==4)printf("%d",((bt[x]&mul[y]).count()&1));
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    Maven最佳实践 划分模块 配置多模块项目 pom modules
    maven 之dependencyManagement 和 pluginManagement
    maven中properties标签定义变量
    Maven根据不同环境打包不同配置文件
    jrebel使用
    maven里如何根据不同的environment打包
    dubbo管理控制台安装和使用
    网站高并发及高并发架构详解
    C#线程安全的那些事
    多线程下C#如何保证线程安全?
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/15225271.html
Copyright © 2020-2023  润新知