当前位置: 首页 > news >正文

「线性基」学习笔记and乱口胡总结

还以为是什么非常高大上的东西花了1h不到就学好了

线性基

线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻)。
上述中\(x\)表示的最大的数。

如何实现

定义\(p[i]\)表示在二进制下从最高位开始第一个出现\(1\)的数。
当前我们将一个数插入线性基中。
如果\(x\)的最高位的\(1\)还没有被插入过,那么就在这一位上插入\(x\)
如果当前这一位被插入过,那么就异或上这一位上的数。
查询操作:从最高位上开始贪心。
如果异或这一位上的数可以让答案更大,那么就异或,否则就异或。

贪心验证

因为我们从高位往低位贪心,所以不需要考虑低位上的数会让高位上的数变小的情况。
介于我们在插入的时候都是无法匹配的时候,异或上这一位上的数,那么就保证了我们的这个数能够达到自己能用的最大贡献。

代码

【洛谷模板区】

#include <bits/stdc++.h>
using namespace std;
const int BIT = 63;
const int N = 52;
typedef long long ll;
ll a[N], p[BIT + 2];
int n; 
void ins(ll x) {
    for (int i = BIT; ~i; i --) {
        if ((x >> i) == 0) continue; 
        if (!p[i]) { p[i] = x; break; }
        x ^= p[i];
    }
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 1; i <= n; i ++) ins(a[i]);
    for (int i = 0; i <= BIT; i ++) cout << i << " " << p[i] << endl; cout << endl;
    ll ans = 0;
    for (int i = BIT; ~i; i --) 
        if ((ans ^ p[i]) > ans) ans ^= p[i];
    cout << ans << endl;
    return 0;
}

转载于:https://www.cnblogs.com/chhokmah/p/10748282.html

相关文章:

  • F#教程:+运算符也是函数
  • 一些想法
  • C语言之数据的存储类别
  • 算法的基本概念
  • 基于GPS数据建立隐式马尔可夫模型预测目的地
  • 转载 线程池之ThreadPool类与辅助线程 - 第二篇
  • 常见异常
  • 供应大型热水工程
  • 程序员为什么要高薪?看完让你勇于为自己开价
  • 更换XPE开关机画面和欢迎界面的方法
  • YUM安装调试以及命令具体解释
  • 深入理解alias, alias_method和alias_method_chain
  • golang包管理工具glide安装
  • 为寻求新增长点 山寨之父MTK发力Android
  • Use SourceLink enables a great source debugging experience
  • 【Amaple教程】5. 插件
  • Docker入门(二) - Dockerfile
  • HTML5新特性总结
  • Java 内存分配及垃圾回收机制初探
  • Python学习笔记 字符串拼接
  • Vue UI框架库开发介绍
  • vue学习系列(二)vue-cli
  • 给第三方使用接口的 URL 签名实现
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 数据可视化之 Sankey 桑基图的实现
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Python第六天)文件处理
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (排序详解之 堆排序)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)UDP基本编程步骤
  • (转)【Hibernate总结系列】使用举例
  • (转)Google的Objective-C编码规范
  • (转)Linux下编译安装log4cxx
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET Standard 的管理策略
  • .net操作Excel出错解决
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET中winform传递参数至Url并获得返回值或文件
  • .pyc文件是什么?
  • @font-face 用字体画图标
  • @Validated和@Valid校验参数区别
  • @在php中起什么作用?
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项