bzoj4137 [FJOI2015]火星商店问题
比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度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]火星商店问题的更多相关文章
- 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)
传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值 ...
- [FJOI2015]火星商店问题
[FJOI2015]火星商店问题 神仙线段树分治...不过我不会. 这题用线段树套可持久化Trie还是能写的. 常数有点大,洛谷垫底水平. // luogu-judger-enable-o2 #inc ...
- 【LG4585】[FJOI2015]火星商店问题
[LG4585][FJOI2015]火星商店问题 题面 bzoj权限题 洛谷 \(Notice:\) 关于题面的几个比较坑的地方: "一天"不是一个操作,而是有0操作就相当于一天开 ...
- 【BZOJ4137】火星商店问题(线段树分治,可持久化Trie)
[BZOJ4137]火星商店问题(线段树分治,可持久化Trie) 题面 洛谷 BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做. 所以我们需要更加优美的做法.--线段树分治. ...
- 洛谷 P4585 [FJOI2015]火星商店问题 解题报告
P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非 ...
- [FJOI2015]火星商店问题(线段树分治,可持久化,Trie树)
[FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道 ...
- 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)
[题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...
- BZOJ4137 & 洛谷4585:[FJOI2015]火星商店问题
https://www.lydsy.com/JudgeOnline/problem.php?id=4137 https://www.luogu.org/problemnew/show/P4585 火星 ...
- 【bzoj4137】[FJOI2015]火星商店问题
*题目描述: 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能 ...
随机推荐
- Python学习笔记——1——基础知识
1.1.变量和算法 python语言很类似人类语言,变量不需要定义类型.比如: 整型 字符串类型 数组 Java int a=12 String s="test" String[] ...
- 蓝牙 BLE GATT 剖析(一)
一.概述 The Generic Attribute Profile (GATT) defines a service framework using the Attribute Protocol. ...
- NRF51822之发射功率
设置蓝牙的TX Power 使用的函数sd_ble_gap_tx_power_set(int8_t tx_power); 参看例子为 S110/ble_app_proximity #define ...
- QWidget 键盘事件 焦点(QApplication源码)
在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件. 键盘事件派发给谁? 如 ...
- php--列表展示(小实训一月考)
效果图:
- RTSP协议详解
RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流媒体提 ...
- Swift-06-闭包
看完记不住,只好继续抄课文. 如果某个存储型属性的默认值需要特别的定制或者准备,就可以使用闭包或者全局函数来为其属性提供定制的默认值.每当某个属性所属的新类型实例创建时,对应的闭包或者函数会被调用,而 ...
- 我的工具箱之VNC
下载地址:http://pan.baidu.com/s/1bovEoZ9 这个工具可以连接到Linux并进行可视化操作. 如何搭建VNC环境请见 在centOS上安装VNC 2016年2月26日11: ...
- 给网卡配置10个临时ip地址,但是不配置192.168.17.15这个ip
给网卡配置10个临时ip地址,但是不配置192.168.17.15这个ip #!/bin/bash `;do ];then continue fi ifconfig eth0:$i .$i netma ...
- Spring Boot 5 SpringSecurity身份验证
对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache Shiro.Spring Security). pom.xm ...