传送门
题意:序列上有nnn个商店,有两种事件会发生:

  1. sss商店上进购标价为vvv的一个物品
  2. 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值。

每个位置都有一种物品每天会新进购(最开始会给出)。


思路:
第一眼显然的线段树套可持久化01trie 恭喜MLE走人
然后发现每个人的询问可以放到按时间建出的线段树上,这个不就可以线段树分治离线处理了吗。
于是把每天进购的物品排个序下放,每一层线段树用一个可持久化01trie来统计答案即可(注意这个并不是线段树和可持久化01trie套在一起)
代码:

#include<bits/stdc++.h>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (l+r>>1)
#define ri register int
using namespace std;
inline int read(){int ans=0;char ch=getchar();while(!isdigit(ch))ch=getchar();while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans;
}
const int N=1e5+5,P=17;
int n,m,stk[N],rt[N],siz[N*20],son[N*20][2],top=0,tot=0,sig=0,ans[N],cnt=0;
vector<int>e[N],qry[N<<2];
struct Query{int l,r,dl,dr,v;}pd[N];
struct UPD{int s,v,d;}upd[N],t1[N],t2[N];
inline void insert(int&p,int last,int val){int o=p=++tot;for(ri i=17;~i;--i){int tmp=(val>>i)&1;son[o][tmp]=++tot,son[o][tmp^1]=son[last][tmp^1];o=son[o][tmp],last=son[last][tmp],siz[o]=siz[last]+1;}
}
inline int query(int ql,int qr,int val){int ret=0;for(ri i=17;~i;--i){int tmp=(val>>i)&1;if(siz[son[qr][tmp^1]]^siz[son[ql][tmp^1]])ret|=(1<<i),ql=son[ql][tmp^1],qr=son[qr][tmp^1];else ql=son[ql][tmp],qr=son[qr][tmp];}return ret;
}
inline void update(int p,int l,int r,int ql,int qr,int v){if(ql>r||qr<l||ql>qr)return;if(ql<=l&&r<=qr){qry[p].push_back(v);return;}if(qr<=mid)update(lc,l,mid,ql,qr,v);else if(ql>mid)update(rc,mid+1,r,ql,qr,v);else update(lc,l,mid,ql,mid,v),update(rc,mid+1,r,ql,qr,v);
}
inline void calc(int p,int l,int r){tot=top=0;for(ri i=l;i<=r;++i){int s=upd[i].s,v=upd[i].v;stk[++top]=s,insert(rt[top],rt[top-1],v);}for(ri i=0;i<qry[p].size();++i){int x=qry[p][i];int ql=upper_bound(stk+1,stk+top+1,pd[x].l-1)-stk-1;int qr=upper_bound(stk+1,stk+top+1,pd[x].r)-stk-1;ans[x]=max(ans[x],query(rt[ql],rt[qr],pd[x].v));}
}
inline void solve(int p,int l,int r,int ql,int qr){if(ql>qr)return;calc(p,ql,qr);if(l==r)return;int hd1=0,hd2=0;for(ri i=ql;i<=qr;++i)if(upd[i].d<=mid)t1[++hd1]=upd[i];else t2[++hd2]=upd[i];for(ri i=1;i<=hd1;++i)upd[ql+i-1]=t1[i];for(ri i=1;i<=hd2;++i)upd[ql+hd1+i-1]=t2[i];solve(lc,l,mid,ql,ql+hd1-1),solve(rc,mid+1,r,ql+hd1,qr);
}
inline bool cmp(const UPD&a,const UPD&b){return a.s<b.s;}
int main(){n=read(),m=read();for(ri i=1;i<=n;++i)insert(rt[i],rt[i-1],read());for(ri i=1,op,ql,qr,x,s,d,v;i<=m;++i){op=read();if(op){ql=read(),qr=read(),x=read(),d=read();ans[++sig]=query(rt[ql-1],rt[qr],x);pd[sig]=(Query){ql,qr,max(1,cnt-d+1),cnt,x};}else s=read(),v=read(),upd[++cnt]=(UPD){s,v,cnt};}for(ri i=1;i<=sig;++i)update(1,1,cnt,pd[i].dl,pd[i].dr,i);sort(upd+1,upd+cnt+1,cmp);solve(1,1,cnt,1,cnt);for(ri i=1;i<=sig;++i)cout<<ans[i]<<'\n';return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/10367772.html

2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)相关推荐

  1. bzoj4137[FJOI2015]火星商店问题

    分析: 首先,一看到求val xor x最大,我们就应该想到可持久化Trie,(详见P4585),这样,当我们询问 L,RL,RL,R 之间的最大异或值时,就直接套用可持久化Trie就行了,这样空间这 ...

  2. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  3. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4 ...

  4. 2019 牛客多校 C Governing sand 线段树

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 Governing sand 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 6 ...

  5. 2019 ICPC银川区域赛 G - Pot!!(线段树维护动态RMQ)

    传送门 题目大意 若ppp为质数,定义potp(n)pot_p(n)potp​(n)为nnn分解质因数ppp的指数.给定一个初始全为111的序列aaa,有两种操作: MULTIPLY l r:将区间[ ...

  6. [计蒜之道2019 复赛 A]外教 Michale 变身大熊猫 (线段树求LIS+思维)

    外教变身萌翻小学员,VIPKID "AR 变脸" 打造趣味互动课堂,这是在线少儿英语品牌 VIPKID 全新推出的辅助教学功能--AR 变脸,外教在上课过程中可以随意选取合适的表情 ...

  7. 2019.01.07|区块链技术头条

    2019.01.07|区块链技术头条 1.科普 | 深处的蚁穴:与 Gas 相关的三种安全问题 2.科普 | OmiseGo 将如何把 Plasma 带入寻常百姓家 3.干货 | 详解 MimbleW ...

  8. python --- 常见题目 2019.01.03

    python --- 面试题 2019.01.03 1. redis 设置过期时间 2. 登录的GET和POST区别 3. python和go的区别 4. 生成器和迭代器 5. 盒子模型 6. RES ...

  9. WPS Office 2019 For Linux在深度应用商店上线

    近日,WPS Office 2019 For Linux 新版本正式发布,版本号为11.1.0.8372(以下简称WPS 2019).除延续WPS 2016版相同体验外,WPS 2019 界面更灵活. ...

最新文章

  1. 基因疾病关联的图卷积神经网络
  2. markdown常用操作(特殊字符显示、换行、字体颜色和大小、图片位置和大小)
  3. 用Visual Studio .Net 2003开发PHP程序
  4. 汤家凤高等数学基础手写笔记-不定积分
  5. Windows 下单机最大TCP连接数
  6. python和php互动_PHP中常见的五种设计模式
  7. linux ini文件,Shell script - Linux下解析ini配置文件
  8. android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮
  9. 因特网上的计算机通常使用的网络协议为,计算机网络原理自考2015年10月真题
  10. php 小程序回调,微信小程序Promise简化回调实例分享
  11. 蓝桥杯数字三角形java,蓝桥杯数字三角形(java)
  12. 智能优化算法:世界杯优化算法-附代码
  13. 杂七杂八(7): win7无法安装python3
  14. L0到L4超全介绍!30+自动驾驶方案汇总
  15. 熄风的止颤的汤治疗帕金森的优势
  16. 力扣动态规划全题型解析【基础、背包、股票、编辑距离、回文】
  17. pron网站制作遇到的问题
  18. 计算机数据表格方框,excel表格数据变框框了-Excel表格弄着弄着突然变成这样了,内容方框全无,有......
  19. 【OpenCV图像处理】十五、图像空域滤波(上)
  20. LincSNP:lncRNA相关SNP位点数据库

热门文章

  1. bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结
  2. 计算机科技作品大赛,世界编程大赛一等奖作品
  3. oracle11g临时表,oracle11G的临时表空间
  4. 简单的java程序代码带注释,Java:基于注释的代码注入的简单技术?
  5. android 4 动画,[Android]开发App,你得知道这些4——动画
  6. python中sorted()函数的用法_Python中的Sorted()函数
  7. 大规模针对iOS设备的恶意广告活动劫持3亿次浏览器会话
  8. 移动端ios和安卓input问题
  9. 使用electron和vue,以ipc通信的方式构建客户端版本的掘金首页
  10. 如何夺回Windows 10系统权限?一分钟就够