首页 > 其他分享 >随机构造特殊运算的应用

随机构造特殊运算的应用

时间:2023-08-16 19:44:49浏览次数:97  
标签:运算 leq 区间 构造 括号 异或 随机 漫画 买下

异或

由于异或有 \(a\oplus b \oplus b=a\) 且满足交换律的性质,因此可以通过异或前缀和来做询问区间内某个数是否出现了偶数次。

例题

她看到宫河日向在货架上放了 \(n\leq 10^5\) 种漫画,货架总共有 \(m\leq 10^5\) 列,其中第 \(i\) 种漫画在第 \(l_i\) 列到第 \(r_i\) 列中的每一列上都各有一本。
泉此方决定选择一个区间,并买下这个区间中每一列上摆放的所有漫画。
对于买下的每一种漫画,泉此方会分别留下若干本(可能为零)保存用和鉴赏用,再剩下一本传教用,所以她希望至少买下一种漫画,且买下的每一种漫画都有奇数本。
但这时柊镜到了,于是泉此方并没有买下任何漫画,不过她想知道,所有可以满足她心意的区间包含的列数之和为多少。

根据前面的结论,出现偶数次是好做的,我们只需要给每种漫画随机赋一个权值,统计区间异或和为零的情况。
那要求奇数次呢?设 \(sxor_i\) 可以注意到为前缀和,对于第 i 种漫画,\(\forall [l,r]\),要求漫画 i 出现了奇数次,如果 \(l_i\leq l\leq r_i\) 那么 \(sxor_r \oplus sxor_l=0\),如果 \(l<l_i\) 那么 \(sxor_r \oplus sxor_l=1\)。问题的核心在于 l 这个位置有没有第 i 种漫画,那么只需要在 \(l_i\) 处再加一本漫画书,令 \(l<l_i\) 的情况结果取反,就是好统计的。
记得去掉空区间的贡献。

    cin >> n >> m;
    for (int i=1,l,r;i<=n;i++)
    {
        cin >> l >> r;
        ull w=rnd();
        b[l]^=w;
        c[l]^=w;c[r+1]^=w;
        cnt[l]++;cnt[r+1]--;
    }
    for (int i=1;i<=m+1;i++) b[i]^=b[i-1],c[i]^=c[i-1],cnt[i]+=cnt[i-1];
    for (int i=1;i<=m+1;i++) c[i]^=c[i-1];
    for (int i=1;i<=m;i++)
    {
        ull val=(c[i]^b[i]);
        mp[val]++;ml[val]+=i;
        ans+=1ll*mp[val]*(i+1)-ml[val];
    }
    cnt[m+1]=0x3f3f3f3f;
    for (int i=1,ccnt=0;i<=m+1;i++)
    {
        if (cnt[i]==0) ccnt++;
        else
        {
            if (ccnt) ans-=1ll*(ccnt+2)*(ccnt+1)*ccnt/6;
            ccnt=0;
        }
    }
    cout << ans;
矩阵乘法

矩阵乘法满足结合律,不满足交换律,这与一个合法的括号序列的要求相似,因此可以在括号序列的的统计中发挥作用。具体来说,对于每一种括号,左括号随机构造一个二阶矩阵 \(A\),右括号为 \(A^{-1}\),一个括号序列合法当且仅当其所有括号对应矩阵的乘积为 \(I\),这用线段树是可以快速维护的。

标签:运算,leq,区间,构造,括号,异或,随机,漫画,买下
From: https://www.cnblogs.com/xu2006/p/17636040.html

相关文章

  • Python 自定义运算符
    Python自定义运算符正向运算符+__add__(self,other)-__sub__(self,other)*__mul__(self,other)/__truediv__(self,other)//__floordiv__(self,other)%__mod__(self,other)**__pow__(self,other)<__lt__(self,other)>__gt__(self,other)==__......
  • 【8月摸鱼计划】CPK RA6M4与浮点运算单元(FPU)
    CPKRA6M4是一款由RenesasElectronics开发的微控制器产品系列。根据官方文档,CPKRA6M4系列的产品并不具备内置的浮点运算单元(FPU)。这意味着,CPKRA6M4微控制器在执行浮点数计算时,需要通过软件实现,而不是使用硬件加速。虽然CPKRA6M4没有内置的FPU,但仍然可以进行浮点数运算,只是相比......
  • 构造一致性哈希算法
    先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0,232-1])将服务器节点放置在这个Hash环上,然后根据数据的key值计算得到其Hash值(其分布也为[0,2^32-1]),接着在Hash环上顺时针查找距离这个key值的Hash值最近的服务器节点,完成key到服务器的映射查找......
  • 1.1 C++ STL 字符串构造函数
    String字符串操作容器是C++标准中实现的重要容器,其主要用于对字符串的高效处理,它和C风格中的string.h并不是同一个库,两个库有极大的差距,C库中的string.h主要面向过程提供一些处理函数,而C++库中的string则是基于类实现的更高效的一种字符串处理方法集,类中提供了非常方便的成......
  • 1.1 C++ STL 字符串构造函数
    String字符串操作容器是C++标准中实现的重要容器,其主要用于对字符串的高效处理,它和C风格中的string.h并不是同一个库,两个库有极大的差距,C库中的string.h主要面向过程提供一些处理函数,而C++库中的string则是基于类实现的更高效的一种字符串处理方法集,类中提供了非常方便的成......
  • Dual(构造)
    题目描述Popskyy&tiasu-Dual[Popskyy&amp;tiasu-Dual](https://soundcloud.com/popskyy/popskyy-tiasu-dual)Theonlydifferencebetweenthetwoversionsofthisproblemistheconstraintonthemaximumnumberofoperations.Youcanmakehacksonl......
  • java中对无参构造和有参构造的理解
    构造器的最大作用就是在创建对象时,对对象实例进行初始化。1.一个类即使什么都不写,也会存在无参构造方法。2.无参构造方法没有返回值类型,且方法名称和类名相同。比如:1publicclassStudent{2privateStringname;3privateintage;45publicvoidst......
  • Linux——shell变量及运算
    #注意等号两边不能有空格,命令才会有空格,像是dockerps,如果加空格,linux以为你写的是某种命令。#数字num=1#字符串str0=teststr1='test'str2="test"#字符串的三种声明方式是有区别的:#1.单引号中的内容回原样输出,不会转义,不会取值。#2.双引号中的内容输出,会转......
  • Python运算符全解析:技巧与案例探究
    在Python编程中,运算符是强大的工具,能够使我们在数据处理和逻辑判断方面更加灵活。本篇博客将全面探讨Python中常用的运算符,包括算术、比较、逻辑、赋值、位、成员和身份运算符,通过实际案例为你展示如何妙用运算符解决问题。算术运算符Python提供了一系列用于数值运算的算术运算符,如......
  • 机器学习之随机森林(sklearn)转自淘嘟嘟
     转自淘嘟嘟 出处:http://www.taodudu.cc/news/show-5314823.html  编程日记chatgpt专题  当前位置: 首页 > NEWS >正文机器学习之随机森林(sklearn)文章目录1.概述1.1集成算法的概述1.2sklearn中的集成算法2.RandomForestClassfi......