【LOJ10121】与众不同

题面

LOJ

题解

这题是_\(tham\)给\(ztl\)他们做的,然而这道题™居然还想了蛮久。。。

首先可以尺取出一个位置\(i\)上一个合法的最远位置\(pre_i\)

而对于一个询问\((l,r)\),因为\(pre_i\)是单调的

所以可以二分出\(pre_i\geq l\)的第一个位置\(mid\)

用\(st\)表维护一下区间\(i-pre_i+1\)最大值\(qmax\)

则\(ans=max(mid-l,qmax(mid,r))\)

注意判断一下边界情况

代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. inline int gi() {
  9. register int data = 0, w = 1;
  10. register char ch = 0;
  11. while (!isdigit(ch) && ch != '-') ch = getchar();
  12. if (ch == '-') w = -1, ch = getchar();
  13. while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
  14. return w * data;
  15. }
  16. const int MAX_N = 200005;
  17. const int MAX_LOG_N = 19;
  18. const int MAX_V = 1e6;
  19. int bln[MAX_V << 1 | 1];
  20. int N, M, a[MAX_N], pre[MAX_N];
  21. int st[MAX_N][MAX_LOG_N], lg2[MAX_N];
  22. void Prepare() {
  23. int l = 1, r = 0;
  24. do {
  25. bln[a[++r]]++;
  26. while (bln[a[r]] > 1) --bln[a[l++]];
  27. pre[r] = l;
  28. } while (l <= N && r <= N && l <= r);
  29. for (int i = 1; i <= N; i++) st[i][0] = i - pre[i] + 1;
  30. for (int j = 1; j <= 18; j++)
  31. for (int i = 1; i + (1 << j) - 1 <= N; i++)
  32. st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
  33. for (int i = 2; i <= MAX_N; i++) lg2[i] = lg2[i >> 1] + 1;
  34. }
  35. int qmax(int l, int r) {
  36. int t = lg2[r - l + 1];
  37. return max(st[l][t], st[r - (1 << t) + 1][t]);
  38. }
  39. int solve(int ql, int qr) {
  40. if (qmax(qr, qr) >= qr - ql + 1) return qr - ql + 1;
  41. int l = ql, r = qr, res = qr;
  42. while (l <= r) {
  43. int mid = (l + r) >> 1;
  44. if (ql <= pre[mid]) res = mid, r = mid - 1;
  45. else l = mid + 1;
  46. }
  47. return max(res - ql, qmax(res, qr));
  48. }
  49. int main () {
  50. N = gi(), M = gi();
  51. for (int i = 1; i <= N; i++) a[i] = gi() + MAX_V;
  52. Prepare();
  53. while (M--) {
  54. int l = gi() + 1, r = gi() + 1;
  55. printf("%d\n", solve(l, r));
  56. }
  57. return 0;
  58. }

【LOJ10121】与众不同的更多相关文章

  1. [LOJ10121] 与众不同

    题目类型:\(DP\)+\(RMQ\) 传送门:>Here< 题意:给定一个长度为\(N\)的序列,并给出\(M\)次询问.询问区间\([L,R]\)内的最长完美序列.所谓完美序列就是指连 ...

  2. .NET程序员细数Oracle与众不同的那些奇葩点

    扯淡 距上次接触 Oracle 数据库已经是 N 年前的事了,Oracle 的工作方式以及某些点很特别,那会就感觉,这货就是一个奇葩!最近重拾记忆,一直在折腾 Oracle,因为 Oracle 与众不 ...

  3. InstantClick – 快速响应!让你的网站与众不同

    尽管网络带宽不断增加,但网站并没有更快很多.这是因为最大的瓶颈在于页面加载的延迟.InstantClick 是一个很小的 JavaScript 库,大大加速你的网站响应速度. 在访问者点击一个链接之前 ...

  4. 经典网页设计:20个与众不同的国外 HTML5 网站

    大家都都知道, HTML5 具备所有最新的技术和功能,帮助我们创造平滑过渡,花式图像滑块和动画.如果你正在考虑使用HTML5 来设计自己的网站,那么这个集合能够帮助你. 在过去的10年里,网页设计师使 ...

  5. 与众不同 windows phone 8.0 & 8.1 系列文章索引

    [源码下载] [与众不同 windows phone 7.5 (sdk 7.1) 系列文章索引] 与众不同 windows phone 8.0 & 8.1 系列文章索引 作者:webabcd ...

  6. 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector

    [源码下载] 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector 作者:webabcd 介绍与众不同 windows phone 8.0 之 新的 ...

  7. 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirectionsTask, MapDownloaderTask

    [源码下载] 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirec ...

  8. 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile

    [源码下载] 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile 作者:webabcd 介绍与众不同 windows ...

  9. 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件

    [源码下载] 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件 作者:w ...

随机推荐

  1. vim基础初步

    vim文本编辑器初步 一.跟vi编辑器的关系 可以说vim编辑器是vi编辑器的升级版,它保留了vi编辑器的所有东西,而且加入了自己的新的特性. 比如说:支持跨平台,支持语法高亮,支持多级撤销等. ++ ...

  2. 问题:alias设置与删除

    新建alias条目 临时 alias  monitor='gnome-system-monitor' 永久 可以在家目录下,新建    .bash_aliases 文件,然后在其中加上你想要的替换的比 ...

  3. Java并发案例04---生产者消费者问题03--使用ReentrantLock

    /** * 面试题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法, * 能够支持2个生产者线程以及10个消费者线程的阻塞调用 * * 使用wait和notify/notif ...

  4. BZOJ1016:[JSOI2008]最小生成树计数(最小生成树,DFS)

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  5. 【[HAOI2015]树上染色】

    这道题真是非常神仙 第一眼看到题面肯定能想到状态是\(dp[i][j]\)表示\(i\)这棵子树里染了\(j\)个黑点的最大值 最大值? 什么最大值,之后就会发现这个样子完全没有办法转移 所以我们考虑 ...

  6. java反射机制执行命令

    public class Encryptor{ public static void main(String[] args) throws IOException, ClassNotFoundExce ...

  7. [19/04/18-星期四] Java的动态性_动态编译(DynamicCompiler,Dynamic:动态的,Compiler:编译程序)

    一.概念 应用场景:如在线评测系统,客户端编写代码,上传到服务器端编译运行:服务器动态加载某些类文件进行编译 /*** * */ package cn.sxt.jvm; import java.io. ...

  8. Linux学习总结(十八)几个简单的文本处理工具cut sort tr split

    1 命令cut 用来截取某一个字段格式 : cut -d '分隔符' [-cf] n, n为数字,表示第几段-d:后面跟分隔符,分割符要加单引号-c:后面接的是第几个字符-f:后面接的是第几段那么意思 ...

  9. 3、Android-全局大喇叭-广播机制

    所谓的官博机制可以理解成为1对多的概念 即一个喇叭所有的人都能听到(统一范围内) 为了便于及逆行系统级别的消息通知 Android引入了一套广播机制 而且更容易进行实现. 3.1.广播机制的简介 再A ...

  10. 2、Android-UI(关于Nine-Patch图片)

    实例: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...