比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度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. 使用多种客户端消费WCF RestFul服务(一)——服务端

    RestFul风格的WCF既然作为跨平台.跨语言.跨技术的一种方式出现,并且在ASP.NET API流行起来之前还是架构的首选技术之一,那么我们就来简要的介绍一下WCF在各个平台客户端的操作. 开发工 ...

  2. 安装PHPStudy2014,打开端口出现80端口 PID4 进程:System-windows服务器应用

    原文:安装PHPStudy2014,打开端口出现80端口 PID4 进程:System-windows服务器应用-黑吧安全网 安装PHPStudy2014,打开端口出现80端口 PID4 进程:Sys ...

  3. logstash

    logstash作为数据搜集器,主要分为三个部分:input->filter->output  作为pipeline的形式进行处理,支持复杂的操作,如发邮件等 input配置数据的输入和简 ...

  4. http://blog.csdn.net/pi9nc/article/details/23169357

    http://blog.csdn.net/pi9nc/article/details/23169357

  5. ASP.NET中application对象的用法

    一.Application对象的理解 Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数.在线名单.意见调查和网上选举等.在给定的应用程序的多有用户之间共享信息,并在服 ...

  6. iOS 使用封装的NSLog来打印调试信息

    //DLog代替NSLog //debugMethod() 代替 NSLog(@"%s", __func__) //DLog在release下不会输出 #ifdef DEBUG # ...

  7. ApacheBench(ab)使用详解

    ab命令原理  Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.  ab命令对发出负载的计算机要求很低,既不会占 ...

  8. Mac键位设定和Xcode快捷键(自己总结,持续更新)

    一. Xcode实用快捷键: Cmd + b                     编译 Cmd + r                      运行 Cmd + z               ...

  9. android自动填写短信验证码

    广播类 package com.examp.azuoyoutong.listner; import java.util.regex.Matcher;import java.util.regex.Pat ...

  10. Vue 模板

    界面: html: @using Abp.Web.Mvc.Extensions @{ ViewBag.CurrentPage = "BasicDatas"; } @section ...