比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度O(NlogN^2)但是因为线段树每个节点都要套个字典树,这样的话空间是不够的,不过由于可以离线处理,我们可以先把每个修改和询问操作所访问的线段树节点保存下来,然后一个个节点去做,这样的话空间复杂度就可以保证了。

代码

 #include<cstdio>
#include<set>
#include<vector>
#define N 1000010
#define M 10000010
using namespace std;
int l[N],r[N],n,m,i,a,typ,b,L,R,ti,ans[N],tot,p[N],cnt,flag;
int s[M][],t[M];
vector<pair<int,int> > vec[N];
vector<int> id[N];
void build(int x,int a,int b)
{
int m;
l[x]=a;r[x]=b;
if (b-a>)
{
m=(a+b)>>;
build(*x,a,m);
build(*x+,m,b);
}
}
void insert(int x,int a,int b,pair<int,int> c,int typ)
{
int m;
if (typ==)
{
vec[x].push_back(c);
id[x].push_back(typ);
}
if ((a<=l[x])&&(r[x]<=b))
{
if (typ)
{
vec[x].push_back(c);
id[x].push_back(typ);
}
return;
}
m=(l[x]+r[x])>>;
if (a<m) insert(*x,a,b,c,typ);
if (m<b) insert(*x+,a,b,c,typ);
}
void cl(int x)
{
int i;
for (i=;i<=;i++)
{
p[-i+]=x%;
x=x/;
}
}
void change(int x,int y)
{
int now,i;
cl(x);
now=;
for (i=;i<=;i++)
{
if (s[now][p[i]]==)
s[now][p[i]]=++tot;
now=s[now][p[i]];
t[now]=max(t[now],y);
}
}
int query(int x,int y)
{
int now,i,ans=;
cl(x);
now=;
for (i=;i<=;i++)
if ((s[now][-p[i]])&&(t[s[now][-p[i]]]>=y))
{
now=s[now][-p[i]];
ans=ans+(<<(-i));
}
else
now=s[now][p[i]];
return ans;
}
void gao(int x)
{
int i,a,b;
for (i=;i<=tot;i++)
s[i][]=s[i][]=t[i]=;
tot=;
for (i=;i<vec[x].size();i++)
{
a=vec[x][i].first;
b=vec[x][i].second;
if (id[x][i]==)
change(a,b);
else
ans[id[x][i]]=max(ans[id[x][i]],query(a,b));
}
if (r[x]-l[x]==)
return;
gao(*x);
gao(*x+);
}
int main()
{
scanf("%d%d",&n,&m);
build(,,n);
for (i=;i<=n;i++)
{
scanf("%d",&a);
insert(,i-,i,make_pair(a,m+),);
}
ti=;
for (i=;i<=m;i++)
{
scanf("%d",&typ);
if (typ==)
{
scanf("%d%d%d%d",&L,&R,&a,&b);
insert(,L-,R,make_pair(a,ti-b+),++cnt);
}
else
{
ti++;
scanf("%d%d",&a,&b);
insert(,a-,a,make_pair(b,ti),);
}
}
gao();
for (i=;i<=cnt;i++)
printf("%d\n",ans[i]);
}

bzoj4137 [FJOI2015]火星商店问题的更多相关文章

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

    传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值 ...

  2. [FJOI2015]火星商店问题

    [FJOI2015]火星商店问题 神仙线段树分治...不过我不会. 这题用线段树套可持久化Trie还是能写的. 常数有点大,洛谷垫底水平. // luogu-judger-enable-o2 #inc ...

  3. 【LG4585】[FJOI2015]火星商店问题

    [LG4585][FJOI2015]火星商店问题 题面 bzoj权限题 洛谷 \(Notice:\) 关于题面的几个比较坑的地方: "一天"不是一个操作,而是有0操作就相当于一天开 ...

  4. 【BZOJ4137】火星商店问题(线段树分治,可持久化Trie)

    [BZOJ4137]火星商店问题(线段树分治,可持久化Trie) 题面 洛谷 BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做. 所以我们需要更加优美的做法.--线段树分治. ...

  5. 洛谷 P4585 [FJOI2015]火星商店问题 解题报告

    P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非 ...

  6. [FJOI2015]火星商店问题(线段树分治,可持久化,Trie树)

    [FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道 ...

  7. 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)

    [题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...

  8. BZOJ4137 & 洛谷4585:[FJOI2015]火星商店问题

    https://www.lydsy.com/JudgeOnline/problem.php?id=4137 https://www.luogu.org/problemnew/show/P4585 火星 ...

  9. 【bzoj4137】[FJOI2015]火星商店问题

    *题目描述: 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能 ...

随机推荐

  1. Window上装PHP开发环境 (XAMPP)

    原作者:http://www.cnblogs.com/martin1009/archive/2011/11/11/2245794.html 1. 从www.apachefriends.org 上下载X ...

  2. jQuery 复选框全选反选

    <script type="text/javascript"> $(function(){ //全选 $("#CheckedAll").click( ...

  3. 毕老师的Editplus

    简介 EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本.HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C ...

  4. [LeetCode]题解(python):050-Pow(x, n)

    题目来源 https://leetcode.com/problems/powx-n/ Implement pow(x, n). 题意分析 Input: x,n Output:pow(x,n) Cond ...

  5. LightOj1054 - Efficient Pseudo Code ( 求n的m次方的因子和 )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1054 题意:给你两个数n和m, 求n^m的所有因子和,结果对1000000007求余; ...

  6. iOS Node Conflict svn冲突

    当出现这个冲突时,应该是我add的文件,和同事处理的方法有冲突导致的. 这个的解决办法是:先revert这个文件,然后再update.

  7. raspberry 烧写镜像到SD卡

    刚开始接触树莓派,需要烧写系统镜像到SD卡,网上找了些资料,记录于此. raspberry镜像下载: https://www.raspberrypi.org/downloads/ 烧写工具: wid3 ...

  8. IntelliJ IDEA大小写转换快捷键

    IntelliJ IDEA大小写转换快捷键 Ctr + Shift + u

  9. Web service是什么?

    原文:http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html 我认为,下一代互联网软件将建立在Web service(也就是&q ...

  10. php实现斐波那契数列以及由此引起的联想

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...