比较容易想到莫队算法+线段树,但是这样时间复杂度是O(nsqrtnlogn)无法通过,考虑如果不进行删除操作,只有添加操作的话那么并查集就可以实现了,于是可以设定sqrtn块,每个块范围为(i-1)*sqrtn到i*sqrtn,那么对于一个左端点在该块之中的询问,若右端点超过块的范围,由于右端点递增,直接添加,而询问在块中的部分则暴力添加,添加完注意还原,复杂度O(nlogn),此题想法与CF620F有一些类似。

  代码

 #include<cstdio>
#include<algorithm>
#define nc() getchar()
#define N 500100
#define Q 300
using namespace std;
int n,m,i,j,k,pos[N],ans,Ans[N],tmp,top,stack[N];
inline int read(){
int x=;char ch=nc();for(;ch<''||ch>'';ch=nc());
for(;ch<=''&&ch>='';x=x*+ch-,ch=nc());return x;
}
struct g{
int l,r,id;
}a[N];
int f[N],s[N],e[N];
bool cmp(g a,g b)
{
if (pos[a.id]==pos[b.id])
return a.r<b.r;
return pos[a.id]<pos[b.id];
}
int gf(int x)
{
int p=x,t;
while (p!=f[p]) p=f[p];
while (x!=p) t=f[x],f[x]=p,x=t;
return p;
}
int GF(int x){
int p=x;
while (p!=f[p]) p=f[p];return p;
}
void add(int x)
{
s[x]=;
int a,b;
a=gf(x+);b=gf(x-);
if (s[a]) s[a]+=s[gf(x)],f[gf(x)]=a;
if (s[b]) s[b]+=s[gf(x)],f[gf(x)]=b;
ans=max(ans,s[gf(x)]);
}
void add2(int x)
{
s[x]=;
int a,b;
a=GF(x+);b=GF(x-);
if (s[a])
{
s[GF(x)]+=s[a];f[a]=GF(x);
top++;stack[top]=a;
}
if (s[b])
{
s[GF(x)]+=s[b];f[b]=GF(x);
top++;stack[top]=b;
}
ans=max(ans,s[x]);
}
int main()
{
n=read();
m=read();
for (i=;i<=n;i++)
e[i]=read();
for (i=;i<=m;i++)
{
a[i].l=read();
a[i].r=read();
a[i].id=i;
pos[i]=a[i].l/Q;
} sort(a+,a++m,cmp);
for (i=;i<=m;i++)
{
int cur=(a[i].l/Q+)*Q;
int now=min(n+,cur);
for (k=i;k<=m;k++) if (a[k].l/Q!=a[i].l/Q) break;
int o=k;
for (j=;j<=n+;j++) f[j]=j,s[j]=;ans=; for (j=i;j<o;j++)
{
while (cur<=a[j].r) add(e[cur++]);
tmp=ans;top=; for (k=a[j].l;k<=min(a[j].r,now-);k++)
add2(e[k]); Ans[a[j].id]=ans; for (k=top;k>=;k--) f[stack[k]]=stack[k];
for (k=a[j].l;k<=min(a[j].r,now-);k++)
s[e[k]]=,f[e[k]]=e[k];
ans=tmp; } i=o-;
} for (i=;i<=m;i++)
printf("%d\n",Ans[i]);
}

bzoj 4358 permu的更多相关文章

  1. bzoj 4358 Permu - 莫队算法 - 链表

    题目传送门 需要高级权限的传送门 题目大意 给定一个全排列,询问一个区间内的值域连续的一段的长度的最大值. 考虑使用莫队算法. 每次插入一个数$x$,对值域的影响可以分成4种情况: $x - 1$, ...

  2. bzoj 4358: permu 莫队

    第一步先莫队分块. 对于每一块l~r,初始右端点设为r+1,然后每个询问先将右端点往右移,然后处理询问在l~r之间的部分,最后用一个栈再把l~r的复原. 具体来说是维护两个数组now1和now2,一个 ...

  3. 4358: permu

    4358: permu 链接 分析: 不删除的莫队+可撤销的并查集. 每次询问先固定左端点到一个块内,然后将这些右端点从小到大排序,然后询问的过程中,右端点不断往右走,左端点可能会撤销,但是移动区间不 ...

  4. 【BZOJ】4358: permu 莫队算法

    [题意]给定长度为n的排列,m次询问区间[L,R]的最长连续值域.n<=50000. [算法]莫队算法 [题解]考虑莫队维护增加一个数的信息:设up[x]表示数值x往上延伸的最大长度,down[ ...

  5. BZOJ 4358 坑 莫队+线段树 死T

    这是一个坑 竟然卡nsqrt(n)logn T死 等更 //By SiriusRen #include <cmath> #include <cstdio> #include & ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/pro ...

  8. BZOJ 1859 Luogu P2589 [ZJOI2006]碗的叠放 (计算几何)

    woc, 13年前的ZJOI就这么毒瘤的嘛... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1859 (luogu)ht ...

  9. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

随机推荐

  1. 简述AFN(AFNetWorking 2.X)的实现分析和简单使用【转】

    [转载] Axc注:版本为AFNetWorking 2.6    3.0需要修改大部分对象 一:声明本 人以前一直是使用ASI网络请求类库的.最近才开始了解使用AFNetworing这个类库.网上也肯 ...

  2. hive中关于数据库与表等的基本操作

    一:基本用法 1.新建数据库 2.删除数据库 3.删除非空的数据库 4.指定数据库的位置 LOCATION:指定数据库的位置,不会在系统的默认文件下. 5.在指定数据库中新建表(验证在指定的数据库中可 ...

  3. 【Android测试】【随笔】与 “美丽说” 测试同事交流

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5405432.html 分享者简介 雪晗,3年+测试经验,现 ...

  4. ubuntu下的jdk安装

    软件环境: 虚拟机:VMware Workstation 10 操作系统:ubuntu-12.04-desktop-amd64 JAVA版本:jdk-7u55-linux-x64 软件下载地址: JD ...

  5. Nodejs电影建站开发实例(下)

    作为一个真正的网站,不能没有数据的支持,下面使用的数据库为mongodb,电影可能有的数据:电影名称.导演.国家.语言.上映时间.图片.简介.视频 4.使用路由 app.js var express ...

  6. Cocos2d-JS引入资源

    以图片为例: 创建项目后,把图片放入res文件夹,修改 app.js var HelloWorldLayer = cc.Layer.extend({ sprite:null, ctor:functio ...

  7. QComboBox

    #include "dialog.h" #include "ui_dialog.h" #include <QtCore> #include < ...

  8. ECSHOP不同商品分类调用不同模板

    1.在ecs_category 表 添加 template 字段 可以在后台运行sql语句:alter table `ecs_category` Add column template text NO ...

  9. 导航栏和里面的View设置的是同一颜色值,实际运行又不一样.

    导航栏和里面的View设置的是同一颜色值,实际运行又不一样.如何保证两者的颜色一致呢?  答案就是:( navigationBar.translucent = NO; )   去除 导航条的分割线(黑 ...

  10. 如何解决.NET Framework4.0的System.EnterpriseServices could not found 的问题

    我今天建基于.NET Framework4.0的webSite时报错 “System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, Pub ...