【LOJ10121】与众不同
【LOJ10121】与众不同
题面
题解
这题是_\(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))\)
注意判断一下边界情况
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 200005;
const int MAX_LOG_N = 19;
const int MAX_V = 1e6;
int bln[MAX_V << 1 | 1];
int N, M, a[MAX_N], pre[MAX_N];
int st[MAX_N][MAX_LOG_N], lg2[MAX_N];
void Prepare() {
int l = 1, r = 0;
do {
bln[a[++r]]++;
while (bln[a[r]] > 1) --bln[a[l++]];
pre[r] = l;
} while (l <= N && r <= N && l <= r);
for (int i = 1; i <= N; i++) st[i][0] = i - pre[i] + 1;
for (int j = 1; j <= 18; j++)
for (int i = 1; i + (1 << j) - 1 <= N; i++)
st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
for (int i = 2; i <= MAX_N; i++) lg2[i] = lg2[i >> 1] + 1;
}
int qmax(int l, int r) {
int t = lg2[r - l + 1];
return max(st[l][t], st[r - (1 << t) + 1][t]);
}
int solve(int ql, int qr) {
if (qmax(qr, qr) >= qr - ql + 1) return qr - ql + 1;
int l = ql, r = qr, res = qr;
while (l <= r) {
int mid = (l + r) >> 1;
if (ql <= pre[mid]) res = mid, r = mid - 1;
else l = mid + 1;
}
return max(res - ql, qmax(res, qr));
}
int main () {
N = gi(), M = gi();
for (int i = 1; i <= N; i++) a[i] = gi() + MAX_V;
Prepare();
while (M--) {
int l = gi() + 1, r = gi() + 1;
printf("%d\n", solve(l, r));
}
return 0;
}
【LOJ10121】与众不同的更多相关文章
- [LOJ10121] 与众不同
题目类型:\(DP\)+\(RMQ\) 传送门:>Here< 题意:给定一个长度为\(N\)的序列,并给出\(M\)次询问.询问区间\([L,R]\)内的最长完美序列.所谓完美序列就是指连 ...
- .NET程序员细数Oracle与众不同的那些奇葩点
扯淡 距上次接触 Oracle 数据库已经是 N 年前的事了,Oracle 的工作方式以及某些点很特别,那会就感觉,这货就是一个奇葩!最近重拾记忆,一直在折腾 Oracle,因为 Oracle 与众不 ...
- InstantClick – 快速响应!让你的网站与众不同
尽管网络带宽不断增加,但网站并没有更快很多.这是因为最大的瓶颈在于页面加载的延迟.InstantClick 是一个很小的 JavaScript 库,大大加速你的网站响应速度. 在访问者点击一个链接之前 ...
- 经典网页设计:20个与众不同的国外 HTML5 网站
大家都都知道, HTML5 具备所有最新的技术和功能,帮助我们创造平滑过渡,花式图像滑块和动画.如果你正在考虑使用HTML5 来设计自己的网站,那么这个集合能够帮助你. 在过去的10年里,网页设计师使 ...
- 与众不同 windows phone 8.0 & 8.1 系列文章索引
[源码下载] [与众不同 windows phone 7.5 (sdk 7.1) 系列文章索引] 与众不同 windows phone 8.0 & 8.1 系列文章索引 作者:webabcd ...
- 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector
[源码下载] 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector 作者:webabcd 介绍与众不同 windows phone 8.0 之 新的 ...
- 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirectionsTask, MapDownloaderTask
[源码下载] 与众不同 windows phone (35) - 8.0 新的启动器: ShareMediaTask, SaveAppointmentTask, MapsTask, MapsDirec ...
- 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile
[源码下载] 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile 作者:webabcd 介绍与众不同 windows ...
- 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件
[源码下载] 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件 作者:w ...
随机推荐
- Requests中文乱码解决方案
分析: r = requests.get(“http://www.baidu.com“) **r.text返回的是Unicode型的数据. 使用r.content返回的是bytes型的数据. 也就是说 ...
- angularjs select下拉搜索框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- RedHat(小红帽)下 yum用不了的解决办法
由于RedHat是商业版的,通常由于没有注册,导致yum程序无法使用(linux下面,yum是个安装软件的“神器”).此时可用CentOS的地址进行替换.下面将一步步说明如何处理: 一.删除RedHa ...
- 在 S5PV210 的 开发板上 使用 串口 收发信息
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
- vue项目中分享到朋友圈,调用微信接口
虽然微信提供了jssdk,不代表可以点击按钮进行分享到朋友圈,是需要微信自带的浏览器右上角进行分享.手机浏览器需要浏览器支持分享到朋友圈的分享机制. 微信jssdk地址: https://mp.wei ...
- Python 学习笔记(十三)Python函数(二)
参数和变量 >>> def foo(a,b): #函数是一个对象 return a+b >>> p =foo #对象赋值语句.将foo函数赋值给p这个变量 > ...
- java spring-WebSocket json参数传递与接收
Websocket原理(摘抄) 一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环 ...
- Extjs6 怎么重写框架的类
创建一个覆写(override)类的推荐方法如下: Ext.define('MyApp.overrides.panel.Panel', { override: 'Ext.panel.Panel', c ...
- 【Linux】进程管理
进程是什么? 程序 保存在硬盘.光盘等介质中的可执行代码和数据 是静态保存的代码 进程 在CPU及内存中运行的动态执行的程序代码 进程是程序运行的实例 同一个程序可能对应多个进程 子进程和父进 ...
- 阿里云CentOS7部署ASP.NET Core
本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录; 环境.工具.准备工作 服务器:阿里云64位CentOS 7.4.1708版本; ...