比较容易想到莫队算法+线段树,但是这样时间复杂度是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. [Stanford 2011] Ordinary Calculator(By myself)

    说明: 前面的RPN计算器是按照stanford课程做的,是后缀表达式的计算.现在这个计算器是自己做的.这个是一般的计算器,即中缀表达式的计算,而且把计算过程也显示在屏幕上, 设计方法: 在Model ...

  2. Android笔记:百度地图与高德地图坐标转换问题

    安卓项目使用了百度地图的定位SDK,web端使用的也是百度地图, 后来发现界面显示百度地图不如高德效果好,web改用高德地图,原本的百度地图坐标是可以直接使用的,由于高德和百度地图的坐标系不一致 要如 ...

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

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

  4. Windows-009-Win7 操作系统安装图文详解

    此文主要讲述 Win7 操作系统的安装,配以详细的图文介绍,希望能对亲有所帮助,若有不足之处,敬请大神指正,不胜感激! 若是亲在虚拟机(VirtualBox)中安装 Win7,其前期虚拟硬件系统的操作 ...

  5. win7系统中ftp服务器搭建方法(多图)

    一.创建FTP站点 1.打开:控制面板---系统和安全---管理工具---Internet 信息服务 2. 建站:右键点击网站---添加FTP站点 3. 输入FTP 站点名称---选择你的 FTP 目 ...

  6. windows server 2008服务器IIS绑定阿里云域名

    一.打开Internet 信息服务(IIS)管理器   二.将你的网站放到服务器目录下,比如D盘下的WWW文件夹.   三.在IIS中,添加网站,网站的物理路径指向第二部中创建的网站.   五.在绑定 ...

  7. 使用APICloud写“华为商城”(前端+后端) 无保留提供源码

    第一次分享了一个可以算是完整的手机商城项目,之前从别人的源码中得到了许多帮助,现在入门了也希望能帮一下大家. 注: 前端,后端都有 数据用的是APICloud的MCM,所以小心流量. 目前只有Andr ...

  8. T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...

  9. Java 找到数组中两个元素相加等于指定数的所有组合

    思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...

  10. bootstrap实战经验

    凡是基本的布局需要float实现的,都可以考虑利用网格布局. 1,.jumbotron可以形成一个青灰色的背景,并自动调节对应边距 2,.panel的应用十分广泛,可以自动设置合适的padding.甚 ...