题目链接

莫队算法

没有用线段树,而是看了showson的并查集%%%

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<string>
  7. #include<cmath>
  8. #include<ctime>
  9. #include<queue>
  10. #include<stack>
  11. #include<map>
  12. #include<set>
  13. #define rre(i,r,l) for(int i=(r);i>=(l);i--)
  14. #define re(i,l,r) for(int i=(l);i<=(r);i++)
  15. #define Clear(a,b) memset(a,b,sizeof(a))
  16. #define inout(x) printf("%d",(x))
  17. #define douin(x) scanf("%lf",&x)
  18. #define strin(x) scanf("%s",(x))
  19. #define LLin(x) scanf("%lld",&x)
  20. #define op operator
  21. #define CSC main
  22. typedef unsigned long long ULL;
  23. typedef const int cint;
  24. typedef long long LL;
  25. using namespace std;
  26. void inin(int &ret)
  27. {
  28. ret=;int f=;char ch=getchar();
  29. while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
  30. while(ch>=''&&ch<='')ret*=,ret+=ch-'',ch=getchar();
  31. ret=f?-ret:ret;
  32. }
  33. int n,m,a[],wei[],temp;
  34. int fa[],s[],bo[],pos[],sta[],top,ANS[];
  35. struct que
  36. {
  37. int l,r,id;
  38. void in(int i){inin(l),inin(r),id=i;}
  39. bool op < (const que &rhs)const {return wei[l]==wei[rhs.l]?r<rhs.r:l<rhs.l;}
  40. }q[];
  41. int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
  42. void merge(int x,int y)
  43. {
  44. x=find(x),y=find(y);
  45. if(x==y)return ;
  46. s[x]+=s[y];
  47. temp=max(temp,s[x]);
  48. fa[y]=x;
  49. }
  50. void init()
  51. {
  52. re(i,,n)fa[i]=i,s[i]=;
  53. temp=;
  54. }
  55. void add(int x)
  56. {
  57. bo[x]=;
  58. s[x]=;
  59. if(bo[x-])merge(x-,x);
  60. if(bo[x+])merge(x,x+);
  61. }
  62. int main()
  63. {
  64. inin(n);inin(m);
  65. int nn=sqrt(n);
  66. re(i,,n)inin(a[i]),wei[i]=(i-)/nn+,pos[a[i]]=i;
  67. re(i,,m)q[i].in(i);
  68. sort(q+,q+m+);
  69. int r=;
  70. re(i,,m)
  71. {
  72. if(i==||wei[q[i].l]!=wei[q[i-].l])
  73. {
  74. Clear(bo,);Clear(s,);
  75. init(),top=;
  76. int head=(q[i].l-)/nn*nn+;
  77. r=min(head+nn-,n);
  78. re(j,head,r)sta[++top]=a[j];
  79. sort(sta+,sta+top+);
  80. }
  81. while(r<q[i].r)add(a[++r]);
  82. int ans=temp,nl=,nr=;
  83. re(j,,top)
  84. {
  85. int c=sta[j];
  86. if(pos[c]<q[i].l||pos[c]>q[i].r)continue;
  87. if(c==nr+)nr+=s[find(c+)]+;
  88. else
  89. {
  90. ans=max(ans,nr-nl+);
  91. nl=c-s[find(c-)];
  92. nr=c+s[find(c+)];
  93. }
  94. }
  95. ANS[q[i].id]=max(ans,nr-nl+);
  96. }
  97. re(i,,m)printf("%d\n",ANS[i]);
  98. return ;
  99. }

bzoj4358 premu的更多相关文章

  1. 【BZOJ4358】permu kd-tree

    [BZOJ4358]permu Description 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. Input 第一行两个整 ...

  2. [BZOJ4358]Permu(回滚莫队)

    [BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. 分析 最简单的方法显然是用线段 ...

  3. bzoj4358: permu

    莫队算法,用线段树维护最长连续1,复杂度O(nsqrt(m)logn) 刚开始TLE了,看了claris大爷的blog说是kd-tree,然而并不会kd-tree…… 然后就打算弃疗了...弃疗之前加 ...

  4. BZOJ4358: permu(带撤销并查集 不删除莫队)

    题意 题目链接 Sol 感觉自己已经老的爬不动了.. 想了一会儿,大概用个不删除莫队+带撤销并查集就能搞了吧,\(n \sqrt{n} logn\)应该卡的过去 不过不删除莫队咋写来着?....跑去学 ...

  5. BZOJ4358:permu

    浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...

  6. [bzoj4358]permu:莫队+线段树/回滚莫队

    这道题是几天前水过去的,现在快没印象了,水一发. 首先我们看到它让求解的是最长的值域 连续段长度,很好. 然后就想到了山海经,但但是我还没有做. 然后又想到了很久以前的一次考试的T3旅馆hotel(我 ...

  7. 「题解」:[BZOJ4358]permu

    问题: permu 时间限制: 30 Sec  内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连 ...

  8. 2018.06.29 NOIP模拟 排列(线段树)

    排列(premu.cpp) [题目描述] 对于一个 1 到 n 的排列,逆序数的定义为:排列中第 i 位 ai的逆序数就是 a1-ai-1中比 ai大的数的个数.另外用 pi表示 a1,-,ai的逆序 ...

  9. [牛客练习赛29D]禁止动规

    description newcoder 你在一个无限长的数轴上,一开始你在原点 本来你只有两种操作:向左dp,以及向右dp 然而由于禁止dp 于是你只能另寻出路 万幸的是,dp之神随机给了你n个变量 ...

随机推荐

  1. elasticsearch中文分词器ik-analyzer安装

    前面我们介绍了Centos安装elasticsearch 6.4.2 教程,elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,别急,已经有大拿把中文分词器做好了, ...

  2. 如何把Composer镜像迁移到Laravel China 维护的镜像?

    今天在更新Laravel-admin:1.6.0提示没有对应的包,后面才发现需要使用官方或者 Laravel-China 的 composer 镜像,phpcomposer 镜像已经停止维护了.怎么从 ...

  3. FCN-全卷积网络

    全卷积网络 Fully Convolutional Networks CNN 与 FCN 通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定 ...

  4. Oracle(1)之虚拟机下安装与简单使用

    Oracle介绍与安装 简介 Oracle 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器 (CLIENT/SERVER) 或 B/ ...

  5. python的运行机制

    不需要生成二进制代码,python解释器把源码->字节码,然后在执行这些字节码. 解释器的具体工作: 1.完成模块(module)的加载和链接 2.将源代码编译成pyCodeObject(字节码 ...

  6. 创建vue项目的时候遇到:PhantomJS not found on PATH

    1.提示找不到PhantomJS需要进行下载,如果网速允许的话可以直接 npm install -g phantomjs 如果网速不给力的话,那就先进行淘宝镜像安装 npm install -g cn ...

  7. sort(排序) qsort(快排) bsearch(二分查找)

    sort: 一.对int类型数组排序 int a[100]; int cmp ( int a , int b ) //不必强制转换 { return a < b;//升序排列. } sort ( ...

  8. NeuroNER+brat工具学习

    1.Brat:http://brat.nlplab.org/ 能够进行直觉标注.命名实体识别.关系标注.分块.共存标注.二元关系标注等(药物与药物).时间标注. 但是这个安装好麻烦啊... 2.

  9. 2019.03.21 admin

    1.新建文件创建一个应用类 stu Python manage.py startapp stu 2,创建应用类 记得在setting中的installed_apps中添加应用 student/mode ...

  10. gperftools 使用经验总结

    先看了网上的一些资料,但都不太适合我.还是看了详细的资料才学会怎么用. 按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安装gp ...