bzoj4358 premu
莫队算法
没有用线段树,而是看了showson的并查集%%%
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define rre(i,r,l) for(int i=(r);i>=(l);i--)
#define re(i,l,r) for(int i=(l);i<=(r);i++)
#define Clear(a,b) memset(a,b,sizeof(a))
#define inout(x) printf("%d",(x))
#define douin(x) scanf("%lf",&x)
#define strin(x) scanf("%s",(x))
#define LLin(x) scanf("%lld",&x)
#define op operator
#define CSC main
typedef unsigned long long ULL;
typedef const int cint;
typedef long long LL;
using namespace std;
void inin(int &ret)
{
ret=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<='')ret*=,ret+=ch-'',ch=getchar();
ret=f?-ret:ret;
}
int n,m,a[],wei[],temp;
int fa[],s[],bo[],pos[],sta[],top,ANS[];
struct que
{
int l,r,id;
void in(int i){inin(l),inin(r),id=i;}
bool op < (const que &rhs)const {return wei[l]==wei[rhs.l]?r<rhs.r:l<rhs.l;}
}q[];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void merge(int x,int y)
{
x=find(x),y=find(y);
if(x==y)return ;
s[x]+=s[y];
temp=max(temp,s[x]);
fa[y]=x;
}
void init()
{
re(i,,n)fa[i]=i,s[i]=;
temp=;
}
void add(int x)
{
bo[x]=;
s[x]=;
if(bo[x-])merge(x-,x);
if(bo[x+])merge(x,x+);
}
int main()
{
inin(n);inin(m);
int nn=sqrt(n);
re(i,,n)inin(a[i]),wei[i]=(i-)/nn+,pos[a[i]]=i;
re(i,,m)q[i].in(i);
sort(q+,q+m+);
int r=;
re(i,,m)
{
if(i==||wei[q[i].l]!=wei[q[i-].l])
{
Clear(bo,);Clear(s,);
init(),top=;
int head=(q[i].l-)/nn*nn+;
r=min(head+nn-,n);
re(j,head,r)sta[++top]=a[j];
sort(sta+,sta+top+);
}
while(r<q[i].r)add(a[++r]);
int ans=temp,nl=,nr=;
re(j,,top)
{
int c=sta[j];
if(pos[c]<q[i].l||pos[c]>q[i].r)continue;
if(c==nr+)nr+=s[find(c+)]+;
else
{
ans=max(ans,nr-nl+);
nl=c-s[find(c-)];
nr=c+s[find(c+)];
}
}
ANS[q[i].id]=max(ans,nr-nl+);
}
re(i,,m)printf("%d\n",ANS[i]);
return ;
}
bzoj4358 premu的更多相关文章
- 【BZOJ4358】permu kd-tree
		[BZOJ4358]permu Description 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. Input 第一行两个整 ... 
- [BZOJ4358]Permu(回滚莫队)
		[BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段 ... 
- bzoj4358: permu
		莫队算法,用线段树维护最长连续1,复杂度O(nsqrt(m)logn) 刚开始TLE了,看了claris大爷的blog说是kd-tree,然而并不会kd-tree…… 然后就打算弃疗了...弃疗之前加 ... 
- BZOJ4358: permu(带撤销并查集 不删除莫队)
		题意 题目链接 Sol 感觉自己已经老的爬不动了.. 想了一会儿,大概用个不删除莫队+带撤销并查集就能搞了吧,\(n \sqrt{n} logn\)应该卡的过去 不过不删除莫队咋写来着?....跑去学 ... 
- BZOJ4358:permu
		浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ... 
- [bzoj4358]permu:莫队+线段树/回滚莫队
		这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ... 
- 「题解」:[BZOJ4358]permu
		问题: permu 时间限制: 30 Sec 内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连 ... 
- 2018.06.29 NOIP模拟 排列(线段树)
		排列(premu.cpp) [题目描述] 对于一个 1 到 n 的排列,逆序数的定义为:排列中第 i 位 ai的逆序数就是 a1-ai-1中比 ai大的数的个数.另外用 pi表示 a1,-,ai的逆序 ... 
- [牛客练习赛29D]禁止动规
		description newcoder 你在一个无限长的数轴上,一开始你在原点 本来你只有两种操作:向左dp,以及向右dp 然而由于禁止dp 于是你只能另寻出路 万幸的是,dp之神随机给了你n个变量 ... 
随机推荐
- TADOConnection组件
			该组件用于建立数据库的连接.ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等. 该组件用于建立数据库的连接,该连接可被多个数据集所共享,但是并不是应用程序中必须的,因为ADO数据 ... 
- 004-linux命令-搜索命令find、locate、whereis、which、type
			一.概述 使用linux系统难免会忘记文件所在的位置,可以使用以下命令对系统中的文件进行搜索. 1.1.find 语法:find <指定目录> <指定条件> <指定动作& ... 
- 【剑指offer】把数组排成最小的数
			一.题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 二.思路: ... 
- CMDB资产管理
			.传统运维和自动化运维的区别: 传统运维: 1.项目上线: a.产品经理前期调研(需求分析) b.和开发进行评审 c.开发进行开发 d.测试进行测试 e.交给运维人员进行上线 上线: 直接将代码交给运 ... 
- dfs模版
			dfs #include <stdio.h> #include <string.h> char Map[16][16]; int mv[16][16]; //mv[i][j] ... 
- poj3126
			被坑了3个小时,本来以为算法错了,谁知道,竟然是素数筛弄错了 !!! #include <iostream>#include <stdio.h>#include <str ... 
- 【Tools】-NO.10.Tools.2.IDEA.1.001-【IDEA Configuration】-
			1.0.0 Summary Tittle:[Tools]-NO.10.Tools.2.IDEA.1.001-[IDEA Configuration]- Style:Tools Series:IDEA ... 
- AOP 入门
			1,源码 Application.java package com.bf; import org.springframework.context.ApplicationContext; import ... 
- 8款不错的 CI/CD工具
			Jenkins Jenkins是CI市场中最知名且最常见的名号之一.其最初是由Sun公司的一位工程师打造的一个辅助项目,并迅速扩展为最大的开源CI工具之一,可帮助工程团队实现自动化部署.顺带一提:我们 ... 
- [LeetCode] 408. Valid Word Abbreviation_Easy
			Given a non-empty string s and an abbreviation abbr, return whether the string matches with the give ... 
