比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度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]);
}

最新文章

  1. Pjax调用
  2. Install FFMPEG and FFMPEG-PHP in CentOS 6 with Virtualmin
  3. 【转】awk、nawk、mawk、gawk的简答介绍
  4. [Javascript] Limit Built Branches on Travis
  5. python初始化父类错误
  6. SqlServer定时跑一段SQL语句
  7. Map &lt;STL&gt;
  8. java面试题整理(1)
  9. Python之excel文件追加内容
  10. AVIER Racing Drone App Privacy Policy
  11. JavaScript和Ajax部分(1)
  12. Linux中sed的用法实践
  13. 使用FluentMigrator进行数据库迁移
  14. 783. Minimum Distance Between BST Node
  15. Spring MVC的Controller统一异常处理:HandlerExceptionResolver
  16. SpringMVC方法传递集合数组
  17. 【转】iOS学习之iOS禁止Touch事件
  18. kafka 多线程消费
  19. 常见电源品牌大揭密(转贴自pceva,作者royalk)
  20. 创建自己的加密货币MNC——以太坊代币(二)

热门文章

  1. JS面相对象
  2. sql 语句查询练习题
  3. [LeetCode] Letter Combinations of a Phone Number(bfs)
  4. ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案
  5. Android TimePickerDialog样式配置与TimePicker模式选择
  6. kernel 模块与简单 hello 模块
  7. ucenter 通信成功后 apps.php无误后 该做的事
  8. 第十一篇 Integration Services:日志记录
  9. 电量显示Binding Converter MVVM
  10. 用仿ActionScript的语法来编写html5——第八篇,图片处理+粒子效果