[BZOJ4184]shallot(线段树+线性基)

线性基补充(删除操作以及区间操作) 离线方法:维护线性基中每个元素的最晚删除时间。 在这篇里面有讲。 Code: #include<bits/stdc++.h> #define maxn 2000005 using namespace std; char cb[1<<20],*cs,*ct; #define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<20,stdin),cs==ct)?0:*cs++) template<class T>i 阅读详情

=== ===

这里放传送门

=== ===

题解

线性基不支持删除,但是可以发现每个数字出现的范围是一段区间,那么如果用线段树把这一段区间打上标记,然后就相当于是每次单点查询。也就是搞一个下标是时间的线段树。然后标记永久化,查答案的时候dfs一遍线段树就可以了。
这题空间贼卡。。一开始算算理论上界4*n还得加上线性基根本开不下。。那动态开点吧,nlogn还是不行。。最后干脆出几组大数据看看发现最多700000+个节点,然后卡着开数组终于跑过去了。。。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a[500010],now[40],cnt,rt,ans[500010],nxt[500010],head[500010],p[500010];
bool ext[500010];
struct segtree{
    int l,r,v[32],res;
    segtree(){l=r=0;res=31;memset(v,0,sizeof(v));}
    void add(int val){
        if (res==0) return;
        for (int i=30;i>=0;i--)
          if (val&(1<<i))
            if (v[i]==0){v[i]=val;--res;break;}
            else val^=v[i];
    }
    int calc(){
        int ans=0;
        for (int i=30;i>=0;i--)
          if ((ans^v[i])>ans) ans^=v[i];
        return ans;
    }
    void add(segtree now){
        if (res==0) return;
        for (int i=30;i>=0;i--)
          if (now.v[i]!=0){
              if (res==0) break;
              if (v[i]==0){v[i]=now.v[i];--res;continue;}
              for (int j=30;j>=0;j--)
                if ((now.v[i])&(1<<j))
                  if (v[j]==0){v[j]=now.v[i];--res;break;}
                  else now.v[i]^=v[j];
          }
    }
}t[850010],b;
int Abs(int x){return (x<0)?-x:x;}
int comp(int x,int y){return Abs(a[x])<Abs(a[y]);}
void Prepare(){
    int cnt=0,v[500010];
    for (int i=1;i<=n;i++) p[i]=i;
    sort(p+1,p+n+1,comp);
    for (int i=1;i<=n;i++)
      if (Abs(a[p[i]])==Abs(a[p[i-1]]))
        if (a[p[i]]<0) v[p[i]]=-cnt;
        else v[p[i]]=cnt;
      else{
          ++cnt;
          if (a[p[i]]<0) v[p[i]]=-cnt;
          else v[p[i]]=cnt;
      }
    for (int i=1;i<=cnt;i++) head[i]=n+1;
    for (int i=n;i>=1;i--)
      if (v[i]>0){
          nxt[i]=head[v[i]];
          head[v[i]]=i;
      }
    memset(p,0,sizeof(p));
    for (int i=1;i<=n;i++)
      if(v[i]<0){
          int val=-v[i];
          p[head[val]]=i;
          head[val]=nxt[head[val]];
      }
}
void add(int &i,int l,int r,int left,int right,int val){
    if (i==0){i=++cnt;t[i]=segtree();}
    if (left<=l&&right>=r){t[i].add(val);return;}
    int mid=(l+r)>>1;
    if (left<=mid) add(t[i].l,l,mid,left,right,val);
    if (right>mid) add(t[i].r,mid+1,r,left,right,val);
}
void getans(int now,int l,int r,segtree base){
    segtree newbase=base;
    newbase.add(t[now]);
    if (l==r) {ans[l]=newbase.calc();return;}
    int mid=(l+r)>>1;
    getans(t[now].l,l,mid,newbase);
    getans(t[now].r,mid+1,r,newbase);
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
      scanf("%d",&a[i]);
    Prepare();
    cnt=rt=0;
    for (int i=1;i<=n;i++)
      if (a[i]>0)
        if (p[i]==0) add(rt,1,n,i,n,a[i]);
        else add(rt,1,n,i,p[i]-1,a[i]);
    getans(rt,1,n,b);
    for (int i=1;i<=n;i++) printf("%d\n",ans[i]);
    return 0;
}
海康机器人visionmaster5.0全局通信西门子S7操作 德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金、化工、印刷生产线等领域都有应用。西门子(SIEMENS)公司的PLC产品包括S7-200、S7-1200、S7-300、S7-400、S7-1500等。西门子S7系列PLC体积小、速度快、标准化,具有网络通信能力,功能更强,可靠性高。S7系列PLC产品可分为微型PLC(如S7-200),小规模性能要求的PLC(如S7-300)和中、高性能要求的PLC(如S7-400)等。 阅读详情

相关推荐

地瓜派RDK X5部署YOLOv11n避坑指南:手把手教你解决Softmax算子导致的性能暴跌问题

本文详细介绍了在地瓜派RDK X5开发板上部署YOLOv11n模型时遇到的性能问题及解决方案。通过强制BPU部署Softmax算子,成功将推理速度从7FPS提升至47FPS,并提供了完整的优化流程和技术细节,帮助开发者避免类似性能陷阱。

weixin_42629671的博客 269

算法【板子】

自己学习用

lty1392309506的博客 1213

数学概念 | 旋转矩阵、欧拉角、四元数

旋转矩阵、欧拉角、四元数概念及相关运算;

NapoleonCoder的博客 772

bzoj1593(线段树)

线段树一种新见的询问方式。 1.询问连续长度为x的空的区间的最左端点,并将这段覆盖 (通过最长子序列来做,先判断左边有没有这样的区间,再判断相连接的地方有没有,再判断右边有没有) 2.区间覆盖为空或有    #include #include #include #include #include using namespace std; int n,ans; struc

zhhx2001的博客 842

实战指南 | 快速修复Adobe Acrobat 2020安装过程中的常见注册表错误

本文提供了Adobe Acrobat 2020安装过程中遇到“无法打开键”注册表错误的详细修复指南。通过安全编辑注册表,精准定位并删除残留键值,可快速解决此常见安装报错,确保软件顺利安装。同时,文章也介绍了其他安装问题的应对策略与预防措施。

weixin_29200485的博客 562

探索Vortex开源GPGPU:RISC-V SIMT架构(2),指令Decode

本文分析了Vortex RISC-V内核的Decode模块设计。文章详细介绍了指令译码过程,包括操作码、功能码和寄存器字段的提取,以及不同类型指令(R/I/S/B/U/UJ)的立即数处理。重点阐述了基于操作码和功能码的分层译码逻辑,包括ALU运算、分支跳转、系统调用等指令的译码规则。此外,还描述了定制指令的处理机制以及与调度器的握手协议。Decode模块通过组合逻辑实现快速译码,并将结果传递给下级Issue模块,同时协调指令流控制。

weixin_55313207的博客 1792

P 哥的桶(线段树+线性基)

线段树维护线性基。

m0_51547083的博客 292

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 475

线性基

定义 百度是这样说的 基:在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。 同样的,线性基是一种特殊的基,它通常会在异或运算中出现,它的意义是:通过原集合S的某一个最小子集S1使得S1内元...

HuangXinyue1017的博客 623

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 499

【YOLO26创新改进】TGRS 2026 | Transformer变体改进篇 | 使用CGTA曲率引导令牌注意力,改善结构与纹理的整体协调,适合遥感小目标检测、旋转目标检测、实例分割任务

本文在YOLO26目标检测模型中引入CGTA曲率引导令牌注意力模块,依据曲率显著性与特征可靠性,从高分辨率特征图中筛选少量关键令牌,再让全部位置与这些代表性特征进行全局交互,从而以较低计算和显存开销建立远距离目标、背景及跨尺度结构之间的联系;该模块能够重点强化车辆、舰船、飞机、建筑等目标的边缘、转角和弯曲轮廓,改善小目标、密集目标及旋转目标的特征完整性与定位稳定性,并通过可靠性门控抑制噪声和伪边缘,通过标准注意力与曲率注意力融合避免平坦区域被过度增强。

AI魔改博士-中大博士 47

【BZOJ4184】shallot 线段树+vector+线性基

【BZOJ4184】shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打...

aodanchui1057的博客 161

uniapp [全端兼容] - 详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,免费自动提示引导动作及语音,提供提供实名认证、身份证识别、人脸信息采集、刷脸扫脸认证示例代码

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,人脸识别,扫脸认证,人脸认证,活体认证,身份认证,uni-app人脸识别详细教程,如何在app端实现免费人脸识别教程,如何在小程序端做,最好用的插件,安卓ios百度人脸识别、活体检测、人脸采集APP,H5人脸识别带前后摄像头,适合新手看的人脸识别功能教程,详细示例代码源码,有没有免费的,接入百度,阿里云人脸识别,百度,api,活体检测,数据采集,动作提示指引,语音提示指引,报错,无法核验一直出错,根本用

🏆 前端领域优质创作者 1万+

【BZOJ4184】shallot(线段树分治,线性基)

【BZOJ4184】shallot(线段树分治,线性基) 题面 权限题啊。。。。。好烦。。 Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下...

weixin_30950237的博客 129

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

bzoj 4184 shallot——线段树分治+线性基

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 本来想了可持久化trie,不过空间是 nlogn (出一个节点的时候把 tot 复原就能做到),时间是 nlog2n 的,不太可过。 查了查发现就是线性基。因为新增一些数的话,线性基只会变大,所以可以很方便地栈序撤销。不过这样时间是不是还是 nlog2n ? 现性基求最大值是看看...

weixin_34198797的博客 236

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[BZOJ4184] shallot (线段树分治+线性基)

题目 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为Oi选手的你,你能帮帮他吗? 你只需要输出最大的异或和即可,若小葱手中没有小葱苗则输出0。 Input 第一行一个正整数nnn表示总时间;第二行nnn个整数a1,a2...ana1,

ICEEBBING的博客 310

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【bzoj4184】 shallot 线段树对时间分治+线性基

有这样一类问题,插入、删除、整体查询。 为了避免删除操作,一般记录每个点的进入时间和删除时间,在线段树里每个节点开一个vector,然后这个区间里插入这个数,最后dfs一遍就只有插入操作,没有删除操作了。 #include #include #include #include #include #include #include #include #define maxn 500010

Oxer的专栏 1803

BZOJ.4184.shallot(线段树分治 线性基)

BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ 。 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include <cstdio> #include <cctype> #include <vector> #include <algorithm> #define BI...

weixin_30695195的博客 122

bzoj 4184: shallot (线段树维护线性基)

题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了)。像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树.......但是我们并没有真正把它与一些数据结构结合在一起过,像线性基,凸包都是只支持加入,不支持删除的。我们需要找一种\(O(nlogn)\) 的方案让他们也支持删除。 本题就可以用线段树维护线性基...

weixin_30429201的博客 215

[bzoj4184]shallot【线段树】【线性基】

【题目链接】   https://www.lydsy.com/JudgeOnline/problem.php?id=4184 【题解】   以时间为下标建立线段树,每个数有一个存在时间区间,挂在对应线段树节点上。询问时维护一个线性基,dfs这颗线段树,在叶节点查询。   时间复杂度O(31N∗logN)O(31N∗logN)O(31N*logN) 【代码】 /* - - - - - -...

D_Vanisher的博客 411

BZOJ4184:shallot(线段树分治,线性基)

Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为Oi选手的你,你能帮帮他吗? 你只需...

weixin_33836874的博客 108

bzoj4184 shallot(线段树分治+线性基)

bzoj4184 shallot原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=4184题意: 每个时刻小苗会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为Oi选手的你,你能帮帮

Bfk的博客 641

BZOJ 4184: shallot 线性基+线段树分治

复习一下线性基 ~ code: #include <cmath> #include <vector> #include <cstdio> #include <string> #include <cstring> #include <algorithm> #define N 500008 ...

EM LGH 163
上一篇: [BZOJ4289][PA2012]Tax(最短路)
下一篇: [BZOJ1196][HNOI2006]公路修建问题(最小生成树)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值