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个变量 ...
随机推荐
- elasticsearch中文分词器ik-analyzer安装
前面我们介绍了Centos安装elasticsearch 6.4.2 教程,elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,别急,已经有大拿把中文分词器做好了, ...
- 如何把Composer镜像迁移到Laravel China 维护的镜像?
今天在更新Laravel-admin:1.6.0提示没有对应的包,后面才发现需要使用官方或者 Laravel-China 的 composer 镜像,phpcomposer 镜像已经停止维护了.怎么从 ...
- FCN-全卷积网络
全卷积网络 Fully Convolutional Networks CNN 与 FCN 通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定 ...
- Oracle(1)之虚拟机下安装与简单使用
Oracle介绍与安装 简介 Oracle 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (CLIENT/SERVER) 或 B/ ...
- python的运行机制
不需要生成二进制代码,python解释器把源码->字节码,然后在执行这些字节码. 解释器的具体工作: 1.完成模块(module)的加载和链接 2.将源代码编译成pyCodeObject(字节码 ...
- 创建vue项目的时候遇到:PhantomJS not found on PATH
1.提示找不到PhantomJS需要进行下载,如果网速允许的话可以直接 npm install -g phantomjs 如果网速不给力的话,那就先进行淘宝镜像安装 npm install -g cn ...
- sort(排序) qsort(快排) bsearch(二分查找)
sort: 一.对int类型数组排序 int a[100]; int cmp ( int a , int b ) //不必强制转换 { return a < b;//升序排列. } sort ( ...
- NeuroNER+brat工具学习
1.Brat:http://brat.nlplab.org/ 能够进行直觉标注.命名实体识别.关系标注.分块.共存标注.二元关系标注等(药物与药物).时间标注. 但是这个安装好麻烦啊... 2.
- 2019.03.21 admin
1.新建文件创建一个应用类 stu Python manage.py startapp stu 2,创建应用类 记得在setting中的installed_apps中添加应用 student/mode ...
- gperftools 使用经验总结
先看了网上的一些资料,但都不太适合我.还是看了详细的资料才学会怎么用. 按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安装gp ...