CF522D Closest Equals 离线扫描 + 线段树
CF522D Closest Equals
题意:m 个询问,求 [l,r] 内相同元素的最小距离。
离线询问,按右端点排序。
对于每一个 a[i],如果 last[a[i]] 存在,将线段树 last[a[i]] 的位置改为 i - last[a[i]]。
查询区间最小值。
当然这题也可以回滚莫队。
注:本题一路从黑题堕落到绿题
#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); ++ i)
#define per(i, a, b) for(int i = (a); i >= (b); -- i)
#define pb emplace_back
#define All(X) X.begin(), X.end()
using namespace std;
using ll = long long;
mt19937 rnd(time(0));
constexpr int N = 5e5 + 5, inf = 0x3f3f3f3f;
int n, m, a[N], b[N], ans[N], lst[N];
vector<pair<int, int>> qr[N];
int t[N << 2];
void modify(int p, int v, int x = 1, int l = 1, int r = n) {
if(l == r) return t[x] = v, void();
int mid = l + r >> 1;
if(p <= mid) modify(p, v, x << 1, l, mid);
else modify(p, v, x << 1 | 1, mid + 1, r);
t[x] = min(t[x << 1], t[x << 1 | 1]);
}
int query(int L, int R, int x = 1, int l = 1, int r = n) {
if(L <= l && r <= R) return t[x];
int ret = inf;
int mid = l + r >> 1;
if(mid >= L) ret = min(ret, query(L, R, x << 1, l, mid));
if(mid < R) ret = min(ret, query(L, R, x << 1 | 1, mid + 1, r));
return ret;
}
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
cin >> n >> m;
rep(i, 1, n) cin >> a[i], b[i] = a[i];
sort(b + 1, b + n + 1);
int tot = unique(b + 1, b + n + 1) - b - 1;
rep(i, 1, n) a[i] = lower_bound(b + 1, b + tot + 1, a[i]) - b;
rep(i, 1, m) {
int l, r; cin >> l >> r;
qr[r].pb(l, i);
}
memset(t, 0x3f, sizeof t);
rep(i, 1, n) {
if(lst[a[i]]) modify(lst[a[i]], i - lst[a[i]]);
for(auto [l, id] : qr[i]) {
ans[id] = query(l, i);
if(ans[id] == inf) ans[id] = -1;
}
lst[a[i]] = i;
}
rep(i, 1, m) cout << ans[i] << '\n';
return 0;
}
CF522D Closest Equals 离线扫描 + 线段树的更多相关文章
- 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树
题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...
- VK Cup 2015 - Qualification Round 1 D. Closest Equals 离线+线段树
题目链接: http://codeforces.com/problemset/problem/522/D D. Closest Equals time limit per test3 secondsm ...
- Codeforces VK Cup 2015 - Qualification Round 1 D. Closest Equals 离线线段树 求区间相同数的最小距离
D. Closest Equals Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/prob ...
- Codeforces Round #345 (Div. 1) D. Zip-line 上升子序列 离线 离散化 线段树
D. Zip-line 题目连接: http://www.codeforces.com/contest/650/problem/D Description Vasya has decided to b ...
- BZOJ3545 Peaks 离线处理+线段树合并
题意: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...
- HDU 5475An easy problem 离线set/线段树
An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu 5091 Beam Cannon(扫描线段树)
题目链接:hdu 5091 Beam Cannon 题目大意:给定N个点,如今要有一个W∗H的矩形,问说最多能圈住多少个点. 解题思路:线段的扫描线,如果有点(x,y),那么(x,y)~(x+W,y+ ...
- K-query SPOJ - KQUERY 离线 线段树/树状数组 区间大于K的个数
题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对 ...
- HDU4630-No Pain No Game(离线,线段树)
Problem Description Life is a game,and you lose it,so you suicide. But you can not kill yourself bef ...
- [CF522D]Closest Equals
题目大意:给一个区间,多次询问,每次问区间$[l,r]$里最近的两个相同的数的距离是多少. 题解:用一个数组$pre_i$表示第$i$个数前面最近的一个相同的数在哪,询问变成了询问$[l,r]$中$i ...
随机推荐
- 计算机网络-Keep Alive
问题背景 介绍两个经典的网络问题, 问题1: 访问位于Azure Application Gateway之后的nodejs server, 偶尔会触发502 问题2: 请求一个Azure App Se ...
- KingbaseES数据库-生产环境慢查询性能优化案例
一.背景 在生产环境中,慢查询不仅影响系统.业务的正常处理.同时严重影响用户的使用感受. 二.表相关信息 2.1 表结构及索引: Table "yktcore.t_dtl_ymt" ...
- #ST表,并查集#洛谷 3295 [SCOI2016]萌萌哒
题目 分析 可以发现除了最高位只能填 1 到 9,其它位置还可以填 0. 直接用并查集找连通块会超时,如果将这些区间的合并可以下传到子区间的合并那样就可以了. 考虑ST表的逆操作,合并时直接合并两个极 ...
- OpenHarmony加速行业应用落地,多款软件发行版正通过兼容性测评
4 月 25 日,OpenAtom OpenHarmony(以下简称"OpenHarmony")技术日在深圳举办,大会聚焦 OpenHarmony 3.1 Release 版本核心 ...
- openGauss资源池化开发者入门指南(一)
openGauss资源池化开发者入门指南(一) 一.内容简介 openGauss 资源池化是 openGauss 推出的一种新型的集群架构.通过 DMS 和 DSS 组件,实现集群中多个节点的底层存储 ...
- k8s之Pod
什么是Pod 通俗的来讲就是以pause为基础容器,其它容器共享pause容器的网络名称空间.主机名以及进程间通信,组成的一个逻辑的容器集合. • Kubernetes Pod是Kubernetes的 ...
- Linux系统中查找文件的方法
-name 必须用到的选项.表明要求系统按照文件名查找. 一般格式:find /(dirname) -name filename 具体文件名查找法: 如果知道了某个文件的文件名,而不知道这个文件放到哪 ...
- redis 简单整理——redis 的哈希基本结构和命令[三]
前言 简单介绍一下哈希基本结构和命令. 正文 什么是hash呢? hash也可以叫做字典.关联数组. 哈希类型是键本身又是一个键值对结构: value={{field1,value1},...{fie ...
- VScode 使用emmet
背景 在很多的编辑场合,很多时候回出现很多逻辑性的问题.可能觉得html是一门没有逻辑的语言,实际上,它是有一定的思想编辑的.后来出现了emmet,这个不仅仅是一种快捷方式,同时也是一种思考方式. 解 ...
- Python数据分析 Series 笔记
002,pandas介绍 003,Series创建 导入Pandas Series 是一种类似于一维数组的对象,由下面两个部分组成: values:一组数据(ndarray类型) index:相关的数 ...